rails caching: expire_action в другом пространстве имен - PullRequest
16 голосов
/ 22 февраля 2011

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

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 я пытаюсь удалить этот кеш при помощи действия create следующим образом:

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

, однако это приведет к истечению срока действия файла кеша, расположенного в views / host / admin / newsposts.Очевидно, что это не может работать, так как im в пространстве имен admin и rails (по праву) ищет срок действия кэша для этого пространства имен.К сожалению, я не могу передать параметр пространства имен методу axpire_action, так как я могу завершить срок действия кэша действий в другом пространстве имен?

Ответы [ 2 ]

41 голосов
/ 22 февраля 2011

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

0 голосов
/ 25 марта 2014

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

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

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

...