我有以下带有范围的User对象:
Class User < ActiveRecord::Base
...
scope :vendors, lambda { where(:user_type => 'v') }
scope :customers, lambda { where(:user_type => 'c') }
...
我想创建一个新的inactive
范围,对于供应商与客户的行为不同,例如在伪代码中
scope :inactive, lambda {
if (:user_type => 'v')
where(some_condition_only_for_vendors)
elsif (:user_type => 'c')
where(different_condition_only_for_customers)
else
where(another_condition)
end
}
这样,我可以执行users.vendors.inactive
之类的操作,根据一组条件获取所有不活跃的供应商,users.customers.inactive
根据另一组条件获取所有非活动客户。
这可能或有更好的方法吗?请注意,这里有很多遗留代码,因此实现继承可能不可行。
谢谢!
答案 0 :(得分:0)
我立即看到的问题是你从类中调用了一个作用域,并且没有记录实例来获取user_type。
User.inactive
所以你可能有类似的东西:
class User < ActiveRecord::Base
scope :inactive, lambda { |user_type|
case user_type
when 'v'
where(some_condition_only_for_vendors)
when 'c'
where(different_condition_only_for_customers)
else
where(another_condition)
end
}
def related_users
User.inactive(user_type).all
end
end