rails caching: expire_action в другом пространстве имен

Мое приложение использует пространство имен для административных целей. Недавно я попытался начать использовать кэширование действий, однако столкнулся с некоторыми проблемами, пытаясь истечь срок действия кэша с помощью expire_action. В основном у меня есть действие index в моем контроллере newspots пространства имен по умолчанию, которое кэшируется с использованием кэширования действий, например:

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. Очевидно, что он не может работать, так как im в пространстве имен администратора и rails (по праву) ищет срок действия кэша для этого пространства имен. К сожалению, я не могу передать параметр пространства имен методу axpire_action, так как я могу завершить срок действия кэша действий в другом пространстве имен?

2 ответа

Решение

После еще нескольких копаний я наконец нашел решение. Это немного намекнуло в методе 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

Еще одна заметка, которую я узнал, если вы хотите просрочить определенный формат, такой как XML, JSON и т. Д., Просто

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

или любой формат, который вы хотите. Мне нужно время, чтобы понять.

Другие вопросы по тегам