rails caching:另一个命名空间中的expire_action

时间:2011-02-22 18:23:29

标签: ruby-on-rails-3 caching namespaces

我的应用程序正在使用命名空间进行管理。我最近尝试开始使用动作缓存,但是我遇到了一些尝试使用expire_action使缓存失效的问题。基本上我在我的默认命名空间newsposts控制器中有一个索引操作,它使用这样的动作缓存进行缓存:

class NewspostsController < ApplicationController

  caches_action :index, :layout => false

  def index
    @posts = Newspost.includes(:author).order("created_at DESC").limit(5)
  end

end

这会缓存views / host / newsposts下的视图。

默认命名空间没有修改数据的操作,它们都在我的管理命名空间中。在我的Admin :: NewspostsController中,我试图在创建操作中使此缓存过期,如下所示:

expire_action(:controller => 'newsposts', :action => 'index')

然而,这将使位于views / host / admin / newsposts下的缓存文件到期。显然它无法工作,因为我在管理员命名空间和rails(正确地)寻找到此命名空间的缓存过期。遗憾的是,我无法将命名空间参数传递给axpire_action方法,因此如何使另一个命名空间中的操作缓存失效?

2 个答案:

答案 0 :(得分:41)

经过一番挖掘,我终于找到了解决方案。在url_for方法中有点暗示:

特别是,前导斜杠确保不会假定名称空间。因此,虽然url_for:controller =&gt;如果当前控制器位于该模块下,'users'可以解析为Admin :: UsersController,url_for:controller =&gt; '/ users'确保您链接到:: UsersController,无论如何。

基本上,

expire_action(:controller => '/newsposts', :action => 'index')

将在默认命名空间中过期,

expire_action(:controller => 'admin/newsposts', :action => 'index')
admin命名空间中的

(默认情况下)。

RailsCast

答案 1 :(得分:0)

我学到的另一个注意事项,如果你想要使特定格式过期,例如XML,JSON等,只需

expire_action(:controller => '/newsposts', :action => 'index', :format => 'xml') 

或您想要的任何格式。我觉得我有点想弄清楚。