2009-08-26 9 views
0

j'ai mis en place une ressource dans routes.rb:routes nommées dans le contrôleur ne résout pas

map.resource :papers 

qui se reflète dans la sortie de rake routes:

new_papers GET /papers/new(.:format)      {:controller=>"papers", :action=>"new"} 
edit_papers GET /papers/edit(.:format)     {:controller=>"papers", :action=>"edit"} 
    papers GET /papers(.:format)       {:controller=>"papers", :action=>"show"} 
      PUT /papers(.:format)       {:controller=>"papers", :action=>"update"} 
      DELETE /papers(.:format)       {:controller=>"papers", :action=>"destroy"} 
      POST /papers(.:format)       {:controller=>"papers", :action=>"create"} 

Le problème se pose lorsque je tente de rediriger à un itinéraire nommé dans une action de contrôleur. Ceci est un extrait de l'action create pour la ressource Papier. Il doit rediriger l'utilisateur vers l'action show du contrôleur paper lors d'une sauvegarde réussie.

if @paper.save 
    redirect_to @paper 
else 
    render :action => 'new' 
end 

L'exception qui se pose est: undefined method 'paper_url', ce qui suggère que le contrôleur ne peut pas voir la route nommée. Ces méthodes d'assistance fonctionneront dans les vues, cependant. Pour autant que je sache, c'est de la même manière qu'un échafaudage Rails met en place une ressource, donc je ne peux pas trouver ce qui ne va pas. Qu'est-ce que j'oublie ici?

+0

C'est une faute de frappe. http://meta.stackexchange.com/q/196985/232821 –

Répondre

2

Il devrait être map.resource s: papiers

Je ne pouvais obtenir l'erreur mon copying sur mon itinéraire, donc j'ai pensé que ce devait être une faute de frappe.

+0

ce qui signifie qu'il doit y avoir un s à la fin de map.resource –

+0

* facepalm * Merci. – Schrockwell

1

Vous avez fait une erreur

L'échafaudage pour le modèle de papier ressemblera à ceci:

papers GET /papers(.:format)     {:controller=>"papers", :action=>"index"} 
      POST /papers(.:format)     {:controller=>"papers", :action=>"create"} 
new_paper GET /papers/new(.:format)    {:controller=>"papers", :action=>"new"} 
edit_paper GET /papers/:id/edit(.:format)   {:controller=>"papers", :action=>"edit"} 
    paper GET /papers/:id(.:format)    {:controller=>"papers", :action=>"show"} 
      PUT /papers/:id(.:format)    {:controller=>"papers", :action=>"update"} 
      DELETE /papers/:id(.:format)    {:controller=>"papers", :action=>"destroy"} 

un coup d'oeil en particulier pour la méthode show:

paper GET /papers/:id(.:format) 

au lieu du vôtre:

papers GET /papers(.:format)  
Questions connexes