Ruby 在rails中,如何在一个模型和与之有归属关系的其他模型上混合模块?

Ruby 在rails中,如何在一个模型和与之有归属关系的其他模型上混合模块?,ruby,ruby-on-rails-3.2,Ruby,Ruby On Rails 3.2,我有以下模块: module PriceItem def price_item(mdl, code, opts = {}) gs_collector.do_something() end end 这与我的Rails 3.2应用程序中的一些模型混合在一起,这些模型具有归属于:gs\u收集器关系。它很好用 我还想将此模块混合到GsCollector模型中。但这就是我遇到麻烦的地方,因为如果我在上面的例子中将gs\u collector更改为self,它将不再适用于我混合使用的其他

我有以下模块:

module PriceItem
  def price_item(mdl, code, opts = {})
     gs_collector.do_something()
  end
end
这与我的Rails 3.2应用程序中的一些模型混合在一起,这些模型具有
归属于:gs\u收集器
关系。它很好用

我还想将此模块混合到GsCollector模型中。但这就是我遇到麻烦的地方,因为如果我在上面的例子中将
gs\u collector
更改为
self
,它将不再适用于我混合使用的其他模型


我如何在
GsCollector
和具有
属于:gs\u collector
的型号中使用此功能?

我不确定这是最好的,但应该考虑

module PriceItem
  def price_item(mdl, code, opts = {})
     if (gs_collector)
        gs_collector.do_something()
     else
        self.do_something()
     end
  end
end

IMO a模块应更通用;您基本上编写了一个实例方法,而不是模块函数。您可能需要考虑诸如“代码>可编辑的东西:GSJEnter收藏夹< /代码>,它将向该模型添加一个函数,并向GsCollector添加一个函数。(不过我对你的用例不是非常清楚。)我不确定你的例子是什么意思。我试图避免在所有模型中重复price_item方法。。。。可能有一个比我想做的更好的方法。我的研究似乎表明,跨模型共享功能的最佳方式是使用模块。通常是这样,但如果在功能运行方式不同的情况下添加功能,则需要以不同的方式进行,这种方式不取决于它在单个类(类型)中的运行方式。@Dave,根据您的建议,我最终在GsCollector模型上创建了一个实例方法。如果你把这个建议作为下面的答案,我很乐意接受