2012-07-08 44 views
2

我正在閱讀Beginning Rails 3.本書創建了一個項目,用戶可以在其中發佈文章。現在Article對象中,他們創造這樣3米範圍如此:爲什麼在活動記錄範圍中使用lambdas

scope :published, where("articles.published_at IS NOT NULL") 
scope :draft, where("articles.published_at IS NULL") 
scope :recent, lambda { published.where("articles.published_at > ?", 1.week.ago.to_date)} 

現在最後lambda功能我可以用這個scope語句來替換它,我也得到了相同的結果:

scope :recent, where("published_at > ?", 1.week.ago.to_date) 

有什麼優勢在這裏使用lambda?

回答

10

如果您不使用lambda,則將在應用程序啓動和緩存時計算時間1.week.ago。因此,即使應用程序已運行數月,它仍將指向應用程序啓動前一週的時間。

您不會在開發環境中注意到這一點,因爲應用程序代碼會在每個請求中重新加載。使用lambda,即使在生產環境中,您也可以確保對每次調用範圍都進行新計算。

+0

好的,爲什麼這本書沒有提到?感謝您的答案@rubish! – mikeglaz 2012-07-12 16:32:23