【发布时间】:2015-01-28 15:07:33
【问题描述】:
我是 Ruby 和 Rails 的新手。
我有一个方法,查询两个不同的数据模型,合并结果,返回合并结果
def combine_models
...
end
该方法当前驻留在控制器中。我想将方法移动到模块或类(仍然不确定是哪个),以便该方法可以在多个控制器中使用。
1) 最好放在哪里?
2) 应该是模块还是类?
3) .rb 文件的内容是什么样的?
目前我有它在/models/combine_class.rb。文件内容为:
class CombineClass
def combine_models
...
end
end
该类似乎是自动加载的,但要调用该方法我必须使用CombineClass.new.combine_models。
4) 这是调用该方法的正确方法吗?有没有办法可以在没有.new. 的情况下调用该方法?
【问题讨论】:
-
回答 4) 仅当您将方法设为
static或class方法时 -
为了澄清 Nermin 的评论,您可以将
def combine_models更改为def self.combine_models。另外,如果您不存储任何状态,我会将其设为模块,将方法保留为def combine_models和include在ApplicationController中。 -
@ptd 感谢您的澄清。我已将其从类更改为模块。我将
include CombineClass添加到ApplicationController,但现在出现错误:undefined method 'combine_models' for CombineClass:Module。我也试过require 'combine_class',但得到同样的错误。
标签: ruby-on-rails ruby