ruby on rails 3 - low - caché de rieles: expire_action en otro espacio de nombres
rails cache clear (2)
Mi aplicación está utilizando un espacio de nombres para fines administrativos. Recientemente intenté comenzar a usar el almacenamiento en caché de acciones, sin embargo, me encontré con algunos problemas al intentar caducar la memoria caché usando expire_action. Básicamente, tengo una acción de índice en mi controlador de postes de noticias de espacio de nombres predeterminado que se almacena en caché mediante el almacenamiento en caché de acciones como este
class NewspostsController < ApplicationController
caches_action :index, :layout => false
def index
@posts = Newspost.includes(:author).order("created_at DESC").limit(5)
end
end
Esto almacena en caché la vista en vistas / host / newsposts.
El espacio de nombres predeterminado no tiene acciones para modificar datos, están todos en mi espacio de nombres de administrador. En mi Admin :: NewspostsController estoy intentando caducar este caché en la acción de crear de esta manera:
expire_action(:controller => ''newsposts'', :action => ''index'')
sin embargo, esto caducará un archivo de caché ubicado en views / host / admin / newsposts. Obviamente, no puede funcionar ya que im en el espacio de nombres de administrador y rieles (justamente) está buscando caducar el caché para este espacio de nombres. Lamentablemente, no puedo pasar un parámetro de espacio de nombres al método axpire_action, entonces, ¿cómo puedo expirar el caché de acciones en otro espacio de nombres?
Una nota adicional que aprendí, si desea expirar un formato específico, como XML, JSON, etc., solo
expire_action(:controller => ''/newsposts'', :action => ''index'', :format => ''xml'')
o cualquier formato que desee. Mírame un rato para averiguarlo.
después de un poco más de excavación finalmente encontré la solución. Es un poco insinuado en el método url_for:
En particular, una barra diagonal principal garantiza que no se asuma ningún espacio de nombres. Por lo tanto, mientras url_for: controller => ''users'' puede resolverse como Admin :: UsersController si el controlador actual vive en ese módulo, url_for: controller => ''/ users'' le asegura que se enlaza con :: UsersController sin importar qué.
Así que básicamente,
expire_action(:controller => ''/newsposts'', :action => ''index'')
Expirará en el espacio de nombres predeterminado, y
expire_action(:controller => ''admin/newsposts'', :action => ''index'')
en el espacio de nombres de administrador (cuando está en forma predeterminada).