首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >rails缓存:另一个名称空间中的expire_action

rails缓存:另一个名称空间中的expire_action
EN

Stack Overflow用户
提问于 2011-02-23 02:23:29
回答 2查看 5.9K关注 0票数 16

我的应用程序正在使用名称空间进行管理。我最近尝试开始使用操作缓存,但是我在尝试使用expire_action使缓存过期时遇到了一些问题。基本上,我在默认的名称空间newsposts控制器中有一个索引操作,它是使用操作缓存进行缓存的,如下所示:

代码语言:javascript
复制
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中,我尝试在创建操作中终止此缓存,如下所示:

代码语言:javascript
复制
expire_action(:controller => 'newsposts', :action => 'index')

但是,这将使位于views/host/admin/newsposts下的缓存文件过期。显然,它不能工作,因为在admin名称空间中的im和rails (正确地)正在寻找这个名称空间的过期缓存。遗憾的是,我不能将名称空间参数传递给axpire_action方法,那么如何终止另一个名称空间中的操作缓存呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-02-23 03:26:50

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

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

所以基本上,

代码语言:javascript
复制
expire_action(:controller => '/newsposts', :action => 'index')

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

代码语言:javascript
复制
expire_action(:controller => 'admin/newsposts', :action => 'index')

在admin名称空间中(默认情况下)。

RailsCast

票数 41
EN

Stack Overflow用户

发布于 2014-03-26 03:09:13

我学到的另一个注意事项是,如果您想终止特定格式,例如XML、JSON等,只需

代码语言:javascript
复制
expire_action(:controller => '/newsposts', :action => 'index', :format => 'xml') 

或者任何你想要的格式。我花了一段时间才弄明白。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5082181

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档