调用模型时的NoMethodError包含来自控制器的类方法

时间:2014-07-17 16:09:43

标签: ruby-on-rails

所以我在我的一个模型中有三个包含的方法

#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有这些类方法?它没有这些类方法吗?当我包含类方法时,我错过了什么吗?

1 个答案:

答案 0 :(得分:0)

这令人困惑,但我得到了它的工作。因此,当我将lib/query更改为lib/queryable以及include Queryable时,它的效果非常好。分页和排序也有效。我必须在我的代码中的其他地方使用Query一词。

太糟糕了,解决方案并不是更有趣,也更具体:(

至少我是在快乐的方式。