And*_*Vit 11
设置命名范围:
named_scope :in_last_month, :conditions => [ "records.created_at > ?", 1.month.ago ]
Run Code Online (Sandbox Code Playgroud)
要调用它(在你的控制器中):
Record.in_last_month
Run Code Online (Sandbox Code Playgroud)
Ian*_*ell 10
named_scope
我认为这是一种相当优雅的方式,但是如果你采用这种方法,你将需要使用一种lambda
方法,以便在最初加载应用程序时不会限定时间.
例如,这个:
named_scope :last_month, :conditions =>
['created_at > ? AND created_at < ?',
Date.today.last_month.beginning_of_month, Date.today.beginning_of_month]
Run Code Online (Sandbox Code Playgroud)
将在您的应用程序启动的第一个月正常运行,但在下个月不正确,除非应用程序重新启动.
但是这个:
named_scope :last_month, lambda {
{:conditions => ['created_at > ? AND created_at < ?',
Date.today.last_month.beginning_of_month, Date.today.beginning_of_month]}}
Run Code Online (Sandbox Code Playgroud)
每次都会工作,因为lambda方法在每次调用时执行,重新评估Date.today
s.
接受的答案和 lambda 改进在 Rails 4 中不起作用。
Rails 4 更新:
scope :last_month, -> {
where( 'created_at > ? AND created_at < ?',
Date.today.last_month.beginning_of_month,
Date.today.beginning_of_month )}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5294 次 |
最近记录: |