2010-06-24 61 views

回答

9

你需要一個lambda。 (這將創建一個匿名方法,其隨後的鋼軌每範圍被調用時調用。)

class Notification < ActiveRecord::Base 
    scope :current_notifications, lambda { 
    now = Time.now 
    where("starts_at <= ?", now).where("ends_at >= ?", now).limit(1) 
    } 
end 
+0

奇怪的是我得到一個錯誤:

你也可以使用一個命名參數刪除重複Time.now,如干涸的關係有點 '語法錯誤,意想不到的「=」 ,期待'|'範圍:current_notifications,lambda {| now = Time.now |'然後在'='和'Time.now'之間有一個空格指向空格 – 2010-06-24 23:07:27

0

在發展你的模型重新裝入每個請求。在生產時,它們被緩存,所以範圍將引用Time.now,就像模型第一次加載到內存時一樣。

使用lambda表達式輪迴。 lambda表達式將在每次使用範圍時進行評估。

scope :current_notifications, lambda do 
    where("starts_at <= :now or ends_at >= :now", now: Time.now).limit(1) 
end 
相關問題