ActiveResource +缓存

我正在构建一个应用程序,它通过带有ActiveResource的api来使用模型。 我注意到了

@resource ||= @resource.do a query 

不起作用,即如果我在我的控制器中放了类似的东西,我的应用程序仍然会查询api。 因此,我没有使用ActiveRecord的内置缓存。 是时候扩大我的知识和技能基础了。

我找到了这个: http : http : //injectisforwizards.com/blog/read-through-caching-of-activeresource/ ,虽然我还不理解这个100%,但是对于那些执行.find的基于控制器的查询,这似乎有效。 但不是我有任何自定义查询,例如:

 @current_resource ||= Resource.get(:resource_all, :by_account=>@current_account.account_key) 

(命中自定义控制器并运行范围,返回集合)

我正在研究这个问题,我会发现发生了什么,但我很好奇是否有人可以告诉我更简单的术语是什么,我可以做些什么来平滑ActiveResource中的缓存更像ActiveRecord,如何我可以定制这个以缓存所有查询等。任何事情都会有所帮助。

编辑:

我发现了这个: https : //github.com/Ahsizara/cached_resource看起来很有前景,但它是新的(并在上面建立了链接)….值得注意的是它似乎没有处理任何类型的集合,但是一个资源很好地查找/缓存。

由于您为每个请求收到一个新的控制器实例,因此这样的缓存不起作用。 我假设你有这样的事情:

 def show @resource ||= expensive_request end 

当该方法执行时,你期望@resource是什么? 之前调用show ? 不会发生。

您需要做的是将内容放入Rails.cache如果您希望它们在请求之间保持Rails.cache 。 如果使用memcached作为后端,这可能非常有效。 有关2.5节的更多信息,请参阅Caching with Rails指南。

通常,比||=缓存方法更好的方法是定义用memoize包装的受保护方法以保存结果。 例如:

 def load_resource expensive_request end memoize :load_resource 

请记住,这仅适用于在同一请求的上下文中对该方法的后续调用,并且与使用Rails.cache