【问题标题】:rails caching: expire_action in another namespacerails缓存:另一个命名空间中的expire_action
【发布时间】:2016-11-05 20:10:13
【问题描述】:

我的应用程序将命名空间用于管理目的。我最近尝试开始使用动作缓存,但是在尝试使用 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 命名空间中,并且 rails 正在(正确地)寻找这个命名空间的过期缓存。遗憾的是我无法将命名空间参数传递给 axpire_action 方法,那么如何使另一个命名空间中的操作缓存过期?

【问题讨论】:

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


    【解决方案1】:

    经过一番挖掘,我终于找到了解决方案。在 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')
    

    在管理命名空间中(默认时)。

    RailsCast

    【讨论】:

      【解决方案2】:

      我学到的一个附加说明,如果你想使特定格式过期,例如 XML、JSON 等,只需

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

      或任何你想要的格式。我需要一段时间才能弄清楚。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-05-25
        • 1970-01-01
        • 1970-01-01
        • 2012-05-27
        • 2018-01-05
        • 1970-01-01
        • 1970-01-01
        • 2016-01-03
        相关资源
        最近更新 更多