2015-10-29 157 views
-1

讓我們舉個例子吧。替代正常寶石紅寶石方法的動作緩存?

def get_data(param1,param2,param3) 
    #do something 
    #make some api calls 
end 

此方法不屬於控制器。我在我的寶石中使用這種方法在我的ruby類中。如何根據參數來緩存方法的結果。類似於Rails中的動作緩存的過程有過期能力。

+0

的可能的複製[?什麼是memoize的跨越Ruby中一個類的實例數據的好辦法(http://stackoverflow.com/questions/13552585/what-是一個很好的方式來記憶數據跨越多個實例的紅寶石) –

+1

另外http://www.justinweiss.com/articles/4-simple-memoization- patterns-in-ruby-and-one-gem/ –

+0

memoize是一個很好的建議,但我沒有把我的整個代碼。它使一些服務電話內,所以我需要過期時間那爲什麼我要使用緩存。@ BradWerth – Praveenkumar

回答

3

您可以使用這種低級別的緩存:

def competing_price 
    Rails.cache.fetch("#{param1}-#{param2}-#{param3}", expires_in: 12.hours) do 
     # do something.. 
    end 
end 

它沒有任何關係,你必須這樣做,只在控制器或模型。你可以在任何地方像你的方法一樣使用它。

結帳參考: http://guides.rubyonrails.org/caching_with_rails.html

+0

我已經這樣做了。但我保留這作爲第二個選項 – Praveenkumar