0
考虑下面的代码:Rails的:命名范围适用于类的类,但没有实例
user_decorator.rb
Refinery::User.class_eval do
has_many :employees, :class_name => 'Refinery::Employee'
scope :active_employees,
lambda {
joins(:employees).merge(::Refinery::Employee.active)
}
end
employee.rb
module Refinery
class Employee < ActiveRecord::Base
belongs_to :user, :class_name => 'Refinery::User'
scope :active, where(:retired => false)
end
end
运行导轨控制台...
> ::Refinery::User.active_employees
=> [ .......... lots of records etc ]
> user = ::Refinery::User.where(:username => 'test').first
=> #<Refinery::User .... etc etc>
> user.active_employees
NoMethodError: undefined method `active_employees' for #<Refinery::User:0x000000051330f8>
我在做什么错?
这是正确的。范围是类级方法,而不是实例级方法。 @DJTripleThreat,问问你自己,'user.active_employees'意味着什么?如果用户是某种可以让员工在其下的老板,那么你可能想要做一些像user.employees.active_employees这样的事情。 – MrDanA 2013-05-10 15:01:28
@MDDanA感谢您的洞察力。我会试试这个。而古斯塔沃你是对的,这些都是阶级水平的方法。多谢你们! – DJTripleThreat 2013-05-11 05:37:58