Подтвердить что ты не робот

Кэширование рельсов: expire_action в другом пространстве имен

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

class NewspostsController < ApplicationController

  caches_action :index, :layout => false

  def index
    @posts = Newspost.includes(:author).order("created_at DESC").limit(5)
  end

end

Это кэширует представление под представлениями/хостами/новостными сообщениями.

В пространстве имен по умолчанию нет действий для изменения данных, все они находятся в моем пространстве имен admin. В моем Admin:: NewspostsController я пытаюсь закончить этот кеш в действии create следующим образом:

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

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

4b9b3361

Ответ 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')

в пространстве имен admin (по умолчанию).

RailsCast

Ответ 2

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

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

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