【问题标题】:Create scopes using instance methods best way使用实例方法创建范围的最佳方式
【发布时间】:2013-03-29 19:49:11
【问题描述】:

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

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,我无法链接其他范围。

各位有什么建议吗?

【问题讨论】:

  • Gals 不能回答吗?

标签: ruby-on-rails-3


【解决方案1】:

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

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

def availables
  where('valid_thru => ?', Date.today)
end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-14
    • 1970-01-01
    • 2013-06-26
    • 1970-01-01
    • 2011-01-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多