2013-04-02 23 views
1

我有一個名爲Article的模型,我想要做的就是顯示上個星期created_at日期的所有文章。我瞭解如何進行滾動周(即最近7天到現在),如this question在Rails中計算非滾動上週

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

但是,我想要做的是找到上週的星期日 - 星期六的文章,無論今天是哪一天。

回答

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 
+0

當我添加這個並使用Article.last_week時,我得到一個語法錯誤。 「意外」:',期待')' – yellowreign

+0

您使用的是哪個版本的ruby?我在這裏使用了1.9哈希語法。 – Luke

+0

啊,我的錯字現在修正了 – Luke

0

Rails提供了一個幫助方法來獲取給定日期的一週的開始和結束。該方法默認爲星期一,因此您必須通過星期日才能覆蓋它。

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

我USEN 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) 
+0

當我這樣做,我得到3/31的開始日期。我將如何適應始終指的是前一週(即3/24)? – yellowreign

+0

更新了我的答案。 – John

+0

謝謝。當我編輯範圍並調用Article.last_week(Date.today)時,出現語法錯誤。意外的tASSOC,期待'}'(它指向「:conditions =>」之後) – yellowreign

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 

希望這會有所幫助。

+0

這似乎工作,如果日期是未來,例如,如果我這樣做Date.parse('星期三)。但是,我期待的是上週2013-03-24到2012-03-30,而不是2013-03-31到2013-04-06。 – yellowreign

+0

'd = Date.parse('Saturday')'⇒'#'' 'd - = 7如果d> Date.today'⇒ '#'' 'Range.new d,d + 1'⇒'# ..#' - 那不是你想要的嗎? – mudasobwa