2010-10-03 44 views
2

我有一個嚴重依賴日期的應用程序。根據當前日期設置這些日期需要進行適度昂貴的計算。就每個請求而言,這些日期是常量 - 它們一旦創建就不會改變 - 但它們在整個一週內都會改變。日期在控制器和模型中都使用。在rails中,在哪裏放置一個基於當前日期變化的常量(變量?)?

我的問題是這樣的:

  • 如果日期沒有每一天的變化,我能/設置它們的配置初始化。但是,當服務器重新啓動
  • ,如果我使用的before_filter設置在ApplicationController中的日期初始化,只能判斷,日期是不提供給我的模型

任何想法?我看着這一切都錯了嗎?謝謝。

回答

1

我認爲在這裏你可以使用Rails緩存。有關更多詳細信息和示例,請參閱herehere

Basicaly,你可以寫緩存:

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

和閱讀:

Rails.cache.read('date') 

可以在整個Rails應用程序使用它(模型,視圖,控制器,...)。

您可以將任何對象存儲在緩存中。默認緩存使用內存,可用於單個Rails實例,但您可以使用不同的緩存存儲方法。

+2

這是在正確的軌道上。您需要將日期設置爲緩存鍵的一部分,以便在日期更改時自動緩存未命中。例如:https://gist.github.com/6c381274d6ad7a78b0d0- 在這種情況下,如果存在,則獲取將返回「some_cache_key _#{Date.today}」。如果它還不存在,那麼它會調用my_expensive_operation,然後將該方法的結果保存到「some_cache_key _#{Date.today}下的緩存中」 – semanticart 2010-10-03 21:36:55

+0

我最終使用了klew和Amadan的答案組合...所以現在我只需要每天生成一次日期。非常感謝大家,這是一個巨大的幫助。 – rxb 2010-10-04 02:37:54

2

其中一種方法是:創建一個單例類,在詢問實例時檢查日期。關閉我的頭頂,

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