以下作用域定義包含兩個錯誤,導致它不能按預期工作。你能找到他們嗎?Rails測驗(找到作用域定義中的錯誤)
named_scope :articles_to_display,
:conditions => ["articles.publish_at < (?)", Time.now]
(列publish_at包含時間/日期,文章應該發佈時)。這些錯誤是基本錯誤,不僅僅是錯別字。
我會接受第一個正確的答案或在幾天後發佈解決方案。
以下作用域定義包含兩個錯誤,導致它不能按預期工作。你能找到他們嗎?Rails測驗(找到作用域定義中的錯誤)
named_scope :articles_to_display,
:conditions => ["articles.publish_at < (?)", Time.now]
(列publish_at包含時間/日期,文章應該發佈時)。這些錯誤是基本錯誤,不僅僅是錯別字。
我會接受第一個正確的答案或在幾天後發佈解決方案。
第一個問題是,Time.now在評估(使用Ruby讀取文件時)的類級別,並且在使用範圍時(這是您最有可能預期的)不進行評估。在這種情況下,您需要將條件生成包裝在lambda/proc中。
named_scope :articles_to_display, lambda {
:conditions => ["articles.publish_at < (?)", Time.now]
}
第二個問題是可能是您想使用Time.zone.now而不是Time.now尊重當前的請求,而不是系統時間在服務器上的本地化時間。
以下是你想要什麼直到結束:
named_scope :articles_to_display, lambda {
:conditions => ["articles.publish_at < (?)", Time.zone.now]
}
我應該抓住拉姆達,因爲我一直使用它們來獲取動態參數。雖然我不知道Time.zone。我的主要項目是一個內部站點,都在一個時區內進行。 :P – DGM 2011-05-04 12:29:39
named_scope :articles_to_display,
:conditions => ["articles.publish_at IS NOT NULL AND articles.publish_at <= (?)", Time.now]
快速嘗試,很好。但空值不是問題(它只是沒有通過條件)。如果我們不關心第二精度,那麼
named_scope :articles_to_display, :conditions => ["articles.publish_at < (?)", DateTime.now]
或者嘗試PROC
named_scope :articles_to_display, proc{ :conditions => ["articles.publish_at < (?)", DateTime.now]}
這裏曾是超人的照片,被刪除:d
有關其他參考,公認的答案,轉換成軌道3是:
scope :articles_to_display, lambda {
where("articles.publish_at < (?)", Time.zone.now)
}
假設軌道2.X? – DGM 2011-05-03 21:39:30
是的,Rails 2.x,我不熟悉Rails 3.x,但我敢打賭,至少有一個問題也適用於它們,更可能兩者都適用。 – Michal 2011-05-03 21:47:09
所以你知道正確答案? OO。 – fl00r 2011-05-03 21:52:15