1

私のアプリケーションでは、最も近い日付イベントにデフォルト設定される現在のイベントは 1 つだけです。このイベントをさまざまな場所で取得する必要がありますが、変更されないため、キャッシュするのが理にかなっています。私が知っている方法は2つあります。

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

どれが一番いいでしょうか?または他の代替手段はありますか?スレッドセーフではないため、@@ クラス変数の使用はお勧めできません。

4

2 に答える 2

1

あなたのアプローチは正しくないと思います。このようにして、アプリはキャッシュされた値を永久に保持します。新しいeventsものはそれに影響しませんが、これは完全に間違っています。何らかのイベントが既に通過したにもかかわらず、まだ「現在」としてキャッシュされている状況である可能性があります。

ちなみに、limit(1).first唯一のと同じfirstです。

于 2012-04-20T06:25:45.477 に答える
1

最初のアプローチも 2 番目のアプローチも正しくありません。定数を定義すると、Rails の初期化処理時間の実際の Event が検出されます。2番目のアプローチはcacheあなたの記録ではありません。私にとっては、これはキャッシュするほど太ったデータではありません。

于 2012-04-20T08:10:47.467 に答える