Comment accéder aux "assigns" après "render: template = > … ”?
-
03-07-2019 - |
Question
J'ai une méthode de traitement des erreurs dans mon ApplicationController:
rescue_from ActiveRecord::RecordNotFound, :with => :not_found
def not_found(exception)
@exception = exception
render :template => '/errors/not_found', :status => 404
end
Dans RAILS_ROOT / app / vues / erreurs / not_found.html.erb
, j'ai ceci:
<h1>Error 404: Not Found</h1>
<%= debug @exception %>
Mais @exception
est toujours nil
. J'ai essayé debug assigns
, mais c'est toujours {}
. Les assignations ne sont-elles pas copiées lors de l'appel de render: template
? Si oui, comment puis-je les obtenir?
Je suis sur les rails de bord.
La solution
C'est étrange et je ne sais pas pourquoi. Au lieu de cela, avez-vous essayé de passer l'exception en tant que local explicite?
def not_found(exception)
render :template => '/errors/not_found',
:status => 404,
:locals => {:exception => exception}
end
et la vue:
<h1>Error 404: Not Found</h1>
<%= debug exception %> <!-- Note no '@' -->
Autres conseils
Extrait de la documentation de l'API pour ActionController :: Base comme vous devriez essayer:
render :template => '/errors/not_found', :status => 404, :locals => {:exception => exception}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow