所以我在我的一个模型中有三个包含的方法
#app/models/foobar.rb
class Foobar
include Paginate
include Sort
include Query
end
在我的控制器中,我打电话给其中一个:
#app/controllers/foobar_controller.rb
Foobar.query(params[:q])
但是得到:
NoMethodError (undefined method `query' for #<Class:0x00000101469400>):
我确保将它们包含在我的application.rb中:
#config/application.rb
config.autoload_paths += %W(#{config.root}/lib)
config.autoload_paths += Dir["#{config.root}/lib/**/"]
这是query.rb:
#lib/query.rb
module Query
module ClassMethods
def query params
(...)
end
end
def self.included(receiver)
receiver.extend ClassMethods
end
end
为什么Controller无法看到Foobar有这些类方法?它没有这些类方法吗?当我包含类方法时,我错过了什么吗?
答案 0 :(得分:0)
这令人困惑,但我得到了它的工作。因此,当我将lib/query
更改为lib/queryable
以及include Queryable
时,它的效果非常好。分页和排序也有效。我必须在我的代码中的其他地方使用Query一词。
太糟糕了,解决方案并不是更有趣,也更具体:(
至少我是在快乐的方式。