2012-04-20 10 views
1

私のアプリケーションでは、最も近い日付イベントをデフォルトとする現在のイベントは1つだけです。このイベントをさまざまな場所で取得する必要があります。変更しないため、キャッシュするのが理にかなっています。私に知られているそれをする2つの方法があります:クラス変数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 

どれが最高でしょうか?または他の選択肢? @@ class変数を使うのはスレッドセーフではないのでお勧めしません。

答えて

1

あなたのアプローチについては正しくはないと思います。この方法では、キャッシュされた値は永遠に保持されます。新しいeventsはそれには全く影響しません。何らかのイベントが既にパスされたが、それでもまだ "現在"としてキャッシュされている場合があります。

ところでlimit(1).firstfirstと同じです。

1

どちらのアプローチも正しくありません。定数を定義すると、実際にはRailsの初期化処理時にイベントが検出されます。 2つ目の方法では、あなたのレコードはcacheになりません。 私にとっては、そうではありません脂肪データをキャッシュする。

関連する問題