2012-04-20 86 views
1

在我的應用程序中,只能有一個當前事件默認爲最近的日期事件。我需要在各個地方檢索這個事件,因爲它沒有改變,所以緩存它是有意義的。有兩種方法可以讓我知道:Rails模型中的類變量VS常量

class Event < ActiveRecord::Base 

    CURRENT_EVENT = Event.where('starts_on >= ?', Time.now). 
        order('starts_on ASC').limit(1).first 

    # OR 

    def self.current_event 
    @@current_event ||= Event.where('starts_on >= ?', Time.now). 
         order('starts_on ASC').limit(1).first 
    end 

end 

哪一個會是最好的?還是有其他的選擇?我知道不建議使用@@類變量,因爲它們不是線程安全的。

回答

1

我想你對你的方法是不正確的:這種方式你的應用程序將永遠保持你的緩存值。新events不會影響它,這是完全錯誤的。可能是某個事件已經通過但仍然被緩存爲「當前」的情況。

順便說一句:limit(1).first和唯一的first是一樣的。

1

第一種和第二種方法都不正確。如果你定義常量 - 它會在Rails初始化處理時間上找到Event,實際上。第二種方法不會cache你的記錄。 至於我,這不是數據緩存。