2008-10-16 7 views
4

j'ai une méthode de gestion des erreurs dans mon ApplicationController:Comment puis-je accéder à "assigns" après "render: template => ..."?

rescue_from ActiveRecord::RecordNotFound, :with => :not_found 

def not_found(exception) 
    @exception = exception 
    render :template => '/errors/not_found', :status => 404 
end 

En RAILS_ROOT/app/views/errors/not_found.html.erb, j'ai ceci:

<h1>Error 404: Not Found</h1> 
<%= debug @exception %> 

Mais @exception est toujours nil là. J'ai essayé debug assigns, mais c'est toujours {}. Les affectations ne sont-elles pas copiées lors de l'appel au render :template? Si oui, comment puis-je les obtenir?

Je suis sur les rails.

Répondre

5

C'est bizarre, et je ne sais pas pourquoi. Comme alternative, 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 '@' --> 
+0

hélas! - voir la mise à jour –

+0

oh, attendez! Oui! sans le @! –

1

De la documentation de l'API pour ActionController::Base il semble que vous devriez essayer:

render :template => '/errors/not_found', :status => 404, :locals => {:exception => exception}