0

我想知道使用实例方法过滤记录来制作范围的最佳方法是什么。这是我的模型:

class Promotion < ActiveRecord::Base

  scope :availables, lambda{ all.select{ |obj| obj.is_available? } }

  def is_available?
    Date.today <= Date.strptime(valid_thru, '%m/%d/%Y')
    ...more validations here
  end
end

这里的问题是这个范围返回一个数组而不是一个 ActiveRecord::Relation 并且我无法链接其他范围。

有什么建议吗?

4

1 回答 1

0

没有办法完成你想要的。如果你想在 ruby​​ 对象上应用逻辑,你不能再返回 ActiveRecord::Relation。

实现这样的事情的唯一方法是在数据库级别上拥有逻辑。在这种情况下,您可以使用类方法来实现您想要的:

def availables
  where('valid_thru => ?', Date.today)
end
于 2013-03-29T11:49:11.770 回答