什么可能导致rails范围抛出NoMethodError

时间:2012-05-10 05:29:08

标签: mysql ruby-on-rails-3 activerecord scope

使用示波器时,什么可能导致rails应用程序出现无方法错误?

我有一个基本的用户类,有猫和狗。我需要组合查询并按创建日期对它们进行排序。最终,各个查询将更加复杂。

    class User < ActiveRecord::Base
        has_many :dogs
        has_many :cats

       scope :pets, joins(:dogs).joins(:cats).order("created_at desc")

在视图中

    <%= render @user.pets%>

导致无方法错误

    undefined method `pets' for #<User:0x00000106370cb0>

1 个答案:

答案 0 :(得分:1)

范围仅定义ActiveRecord模型上的类方法。调用它的正确方法是直接在User模型上。 User.pets,而不是用户@user.pets的实例。

您可以做的是创建一个在User实例上调用的方法。

   def pets
     User.joins(:dogs).joins(:cats).order("created_at desc")
   end

因此,@user.pets是允许的。