【发布时间】:2011-07-26 08:51:34
【问题描述】:
我们正在更新 rails 2 应用程序。我们一直很高兴使用fake_arel,它提供了一个非常好的“或”范围。
现在,使用 rails 3,我找不到复制它的方法。
我们有这样的代码:
scope.or(Event.horse, Event.dog, Event.trap).today
模型如下所示:
class Event < ActiveRecord::Base
named_scope :horse, lambda { {:conditions => ["sport_category_id in (?)", SportCategory.find_horse_ids] }}
named_scope :dog, lambda { {:conditions => ["sport_category_id in (?)", SportCategory.find_dog_ids] }}
named_scope :trap, lambda { {:conditions => ["sport_category_id in (?)", SportCategory.find_trap_ids] }}
end
这些作用域需要分开并在各处使用。这个模型其实上面有几十个作用域组合使用,所以我们最不想做的就是全部重写。
您不能将作用域“或”在一起似乎很奇怪。
有人可以提出一种在 Rails 3 中也能做到这一点的方法吗?即使使用 arel 我也不知道该怎么做。 我们在另一个项目中使用 meta_where,但它也不提供任何此类功能。
【问题讨论】:
标签: ruby-on-rails-3 activerecord scope