我的应用程序正在使用名称空间进行管理。我最近尝试开始使用操作缓存,但是我在尝试使用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下的缓存文件过期。显然,它不能工作,因为在admin名称空间中的im和rails (正确地)正在寻找这个名称空间的过期缓存。遗憾的是,我不能将名称空间参数传递给axpire_action方法,那么如何终止另一个名称空间中的操作缓存呢?
发布于 2011-02-23 03:26:50
经过进一步的挖掘,我终于找到了解决方案。这在url_for方法中有一点暗示:
特别是,前导斜杠确保不假定任何名称空间。因此,如果当前控制器位于该模块下,则url_for :controller => 'users‘可能会解析为Admin::UsersController,而url_for :controller => '/users’无论如何都可以确保您链接到::UsersController。
所以基本上,
expire_action(:controller => '/newsposts', :action => 'index')
将在默认命名空间中过期,并且
expire_action(:controller => 'admin/newsposts', :action => 'index')
在admin名称空间中(默认情况下)。
发布于 2014-03-26 03:09:13
我学到的另一个注意事项是,如果您想终止特定格式,例如XML、JSON等,只需
expire_action(:controller => '/newsposts', :action => 'index', :format => 'xml')
或者任何你想要的格式。我花了一段时间才弄明白。
https://stackoverflow.com/questions/5082181
复制相似问题