2

日付に大きく依存するアプリがあります。現在の日付に基づいて、これらの日付を設定するために必要な、かなり高価な計算があります。各リクエストに関する限り、これらの日付は一定であり、一度作成されると変更されませんが、1 週間を通して変更されます。日付はコントローラーとモデルの両方で使用されます。

私の問題はこれです:

  • 日付が毎日変わらない場合は、config/initializers で設定できます。ただし、初期化子はサーバーの再起動時にのみ評価されます
  • before_filter を使用して applicationController で日付を設定すると、モデルで日付を使用できません

何か案は?私はこれをすべて間違って見ていますか?ありがとう。

4

2 に答える 2

2

1 つの方法は、インスタンスを要求されたときに日付をチェックするシングルトン クラスを作成することです。私の頭の上から、

class MyDates
  def self.get_instance
    unless @instance && @date == Date.new
      @date = Date.new
      @instance = self.new(@date)
    end
    @instance
  end

  def initialize(date)
    # calculate the expensive stuff
  end
end
于 2010-10-03T17:29:08.540 に答える
1

ここではRailsキャッシングが使えると思います。詳細と例については、こちらこちらをご覧ください。

基本的に、キャッシュに書き込むことができます:

Rails.cache.write('date', Date.today)

そして読む:

Rails.cache.read('date')

Rails アプリケーション全体 (モデル、ビュー、コントローラーなど) で使用できます。

任意のオブジェクトをキャッシュに保存できます。デフォルトのキャッシングはメモリを使用し、単一の Rails インスタンスで使用できますが、別のキャッシュ保存方法を使用することもできます。

于 2010-10-03T18:08:47.683 に答える