1

我有一个名为 Article 的模型,我想做的是显示 created_at 日期为上周的所有文章。我了解如何滚动一周(即到现在的最后 7 天),例如这个问题

scope :last_week,  lambda { :conditions => { :created_at => 1.week.ago..DateTime.now.end_of_day } }

但是,我想做的是找到上周周日到周六的文章,不管今天是哪一天。

4

3 回答 3

0

Rails 提供了一个辅助方法来获取给定日期的一周的开始和结束。该方法默认为星期一,因此您必须传入星期天才能覆盖它。

  scope :last_week,  lambda { :conditions => { :created_at => Date.today.at_beginning_of_week(:sunday)..Date.today.at_end_of_week(:sunday) } }

我以 Date.today 为例,但您可以让范围具有日期参数,以便您可以将任何日期应用于范围。

编辑:

scope :last_week, lambda{ |date| {:conditions => ((date - 1.week).at_beginning_of_week(:sunday))..((date-1.week).at_end_of_week(:sunday)) }}

然后只需将范围称为

last_week(some_date)
于 2013-04-02T03:28:31.793 回答
0

Date.parse给出了在工作日名称上运行的令人敬畏的结果:

require 'date'
# ⇒ true
Date.today
# ⇒ <Date: 2013-04-02 ((2456385j,0s,0n),+0s,2299161j)>
Date.parse('Sunday')
# ⇒ <Date: 2013-03-31 ((2456383j,0s,0n),+0s,2299161j)>
Date.parse('Wednesday')
# ⇒ <Date: 2013-04-03 ((2456386j,0s,0n),+0s,2299161j)>

所以你只需要:

def last_weekend
  d = Date.parse('Saturday')
  d -= 7 if d > Date.today
  Range.new d, d+1
end

希望这可以帮助。

于 2013-04-02T03:33:56.283 回答
0

类似于约翰的回答,但我认为这更适合你的情况:

scope :last_week, lambda { { conditions: { created_at: last_week_range } } }

def self.last_week_range
  1.week.ago.beginning_of_week(:sunday)..1.week.ago.end_of_week(:sunday)
end
于 2013-04-02T04:19:51.830 回答