RoR:named_scope,过去7天内创建的所有记录?

时间:2008-11-25 17:40:36

标签: ruby-on-rails ruby

如何定义named_scope以返回在过去7天内创建的所有记录,然后如何在控制器中使用该命名范围?

3 个答案:

答案 0 :(得分:6)

我建议您观看Railscast Episode on named_scope

理想情况下,您正在寻找的代码是:

 named_scope :recent, 
   lambda { |*args| {:conditions => ["created_at > ?", (args.first || 7.days.ago)]} }

这将允许您将参数传递给指定的范围,或者它将默认为前7天。

您可以使用以下方式调用它:

MyModel.recent

答案 1 :(得分:0)

您需要将named_scope传递给proc,以便每次运行对named_scope的调用时都会对其进行评估。否则,如果您指定Time.now,它将运行一次(在第一次调用时)并“缓存”,直到应用程序重新启动。

  named_scope \
    :this_week,
    :conditions =>  [
      %created_at > :time!,
      proc {{:time => Time.now}}
    ]

你可以调用named_scope @ ar_object.this_week

答案 2 :(得分:0)

我一直在寻找可以返回last 7 days的记录,即今天不包括在内。但这对我有用,它对last n days也有用。

scope :last_n_days, lambda {|n| where('created_at BETWEEN ? AND ?', Date.today - n, Date.today - 1)}