如何查找上个月创建的记录?

8 ruby ruby-on-rails

我有一张表,每天都会添加新记录.我如何查找上个月创建的记录?

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.todays.


B S*_*ven 5

接受的答案和 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)