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')
в пространстве имен администратора (когда по умолчанию).
Еще одна заметка, которую я узнал, если вы хотите просрочить определенный формат, такой как XML, JSON и т. Д., Просто
expire_action(:controller => '/newsposts', :action => 'index', :format => 'xml')
или любой формат, который вы хотите. Мне нужно время, чтобы понять.