2015-10-29 193 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