如何定义named_scope以返回在过去7天内创建的所有记录,然后如何在控制器中使用该命名范围?
答案 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)}