Кэширование рельсов: 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, поэтому как я могу закончить кеш действия в другом пространстве имен?
Ответы
Ответ 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')
или любой другой формат. Мне показалось, что я понял.