我有一个名为Article的模型,我想要做的是显示上周创建的日期为所有文章。我理解如何滚动周(即过去7天到现在),例如this question。
scope :last_week, lambda { :conditions => { :created_at => 1.week.ago..DateTime.now.end_of_day } }
然而,我想做的是找到星期日 - 上周六的文章,无论当天是哪一天。
答案 0 :(得分: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)
答案 1 :(得分: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
希望这有帮助。
答案 2 :(得分: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