form_for soulève une "RoutingError" - My Hotel - 15-09-2010
Salut!
Je développe pour m'entraîner avec rails un système news/comments/etc. Tout va bien, jusqu'au moment où je me penche sur la vue d'ajout de news, soit views/news/new.html.erb (oui, je sais, je devrais utiliser HAML...)
Je crée mon formulaire de base :
<%= form_for @new do |f| %>
<%= f.label :title %><br />
<%= f.text_field :title %>
<%= f.label :content %><br />
<%= f.text_area :content %>
<%= f.submit "Ajouter la news" %>
<% end %>
Mon controlleur de news ressemble à ça (en simplifié aussi) :
def new
@new = New.new
end
def destroy
#Pas encore implémenté
end
def create
#Pas encore implémenté
end
Et lorsque j'exécute le page http://localhost:3000/news/new, j'ai droit à :
Citation :ActionController::RoutingError in News#new
Citation :No route matches {:action=>"destroy", :controller=>"news"}
Comme je comprends pas vraiment le bug, sachant que j'ai mis en place la même chose pour plusieurs autres contrôleurs... J'ai cherché sur le web, je suis tombé sur plusieurs personnes qui ont le même souci, mais aucune réponse.
Voilà, je suppose que c'est un petit détail, mais j'arrive pas à mettre le doigt dessus (un peu noob ).
Merci d'avance
Bye
EDIT : évidemment, mes routes sont correctement conigurées (enfin je pense). J'ai même tenté de définir manuellement la route destroy de news.
RE: form_for soulève une "RoutingError" - Sephi-Chan - 15-09-2010
Déjà, d'office, je dirais que tu as des couilles d'appeler un modèle New, car comme tu as une relation de type comment belongs_to new, pour récupérer la new d'un commentaire, tu vas faire @comment.new et ça peut être moche. Dans l'idéal, je chercherais un nom alternatif.
Colle le contenu de ton fichier routes.rb et colle ausso le retour de la tâche rake routes.
Sephi-Chan
RE: form_for soulève une "RoutingError" - My Hotel - 15-09-2010
Oui, pour le nom du modèle, je me suis aussi dit que ça allait foutre la merde, mais j'avais aucune inspiration... Bref, si tu as un nom alternatif à me proposer
Sinon, au niveau de mon routes.rb, ça donne ça :
root :to => "pages#home"
match '/signup', :to => 'users#new'
match '/signin', :to => 'sessions#new'
match '/signout', :to => 'sessions#destroy'
resources essions
resources :users
resources :news
resources :comments
Et voici le résultat de rake routes :
comments_new GET /comments/new(.:format) {:controller=>"comments", :action=>"new"}
sessions_new GET /sessions/new(.:format) {:controller=>"sessions", :action=>"new"}
root /(.:format) {:controller=>"pages", :action=>"home"}
signup /signup(.:format) {:controller=>"users", :action=>"new"}
signin /signin(.:format) {:controller=>"sessions", :action=>"new"}
signout /signout(.:format) {:controller=>"sessions", :action=>"destroy"}
sessions GET /sessions(.:format) {:action=>"index", :controller=>"sessions"}
sessions POST /sessions(.:format) {:action=>"create", :controller=>"sessions"}
new_session GET /sessions/new(.:format) {:action=>"new", :controller=>"sessions"}
edit_session GET /sessions/:id/edit(.:format) {:action=>"edit", :controller=>"sessions"}
session GET /sessions/:id(.:format) {:action=>"show", :controller=>"sessions"}
session PUT /sessions/:id(.:format) {:action=>"update", :controller=>"sessions"}
news GET /news/:id(.:format) {:action=>"show", :controller=>"news"}
news PUT /news/:id(.:format) {:action=>"update", :controller=>"news"}
news DELETE /news/:id(.:format) {:action=>"destroy", :controller=>"news"}
comments GET /comments(.:format) {:action=>"index", :controller=>"comments"}
comments POST /comments(.:format) {:action=>"create", :controller=>"comments"}
new_comment GET /comments/new(.:format) {:action=>"new", :controller=>"comments"}
edit_comment GET /comments/:id/edit(.:format) {:action=>"edit", :controller=>"comments"}
comment GET /comments/:id(.:format) {:action=>"show", :controller=>"comments"}
comment PUT /comments/:id(.:format) {:action=>"update", :controller=>"comments"}
comment DELETE /comments/:id(.:format) {:action=>"destroy", :controller=>"comments"}
Merci de te pencher sur mon problème, bye
RE: form_for soulève une "RoutingError" - Sephi-Chan - 15-09-2010
Pour le nom du modèle, tu peux choisir celui utilisé dans tous les blogs : Post.
Comme tu peux le voir, tu n'as pas de routes pour le contrôleur news#new. Mais je ne sais pas pourquoi : resources en génère 7.
Par contre, tes routes du haut ne m'inspire pas confiance. Les routes comments_new et sessions_new n'ont pas une forme usuelle et il n'y a pas les routes pour ta ressources users.
Donc je dis que tu me caches quelque chose.
Sephi-Chan
RE: form_for soulève une "RoutingError" - popayan - 15-09-2010
bizarre qu'il n'y ai pas la route
new_new GET /news/new(.:format) {:action=>"new", :controller=>"news"}
ou alors c'est vraiment le fait de nommer ton model New qui pose problème.
As tu essayé de définir la route ci dessus en dur dans le fichier route.rb?
RE: form_for soulève une "RoutingError" - My Hotel - 15-09-2010
OK, pour le nom du modèle, je vais faire le changement. Y'a moyen de faire ça automatiquement, ou c'est tout à la main?
Sinon, au niveau des routes, c'est vrai que c'est le bordel, mais je comprends pas pourquoi. Mais je viens de me rendre compte qu'il manque des routes dans mon routes.rb. J'étais justement en train de tripatrouiller le fichier, donc c'est pour cela que y'a eu fail...
Le fichier complet est :
get "comments/new"
get "comments/create"
get "news/show"
get "sessions/new"
root :to => "pages#home"
match '/signup', :to => 'users#new'
match '/signin', :to => 'sessions#new'
match '/signout', :to => 'sessions#destroy'
resources essions
resources :users
resources :news
resources :comments
Ces 4 lignes sont inutiles, non? Donc je les vire, et rake routes donne (brut de décoffrage):
Citation : root /(.:format) {:controller=>"pages", :action=>"home"}
signup /signup(.:format) {:controller=>"users", :action=>"new"}
signin /signin(.:format) {:controller=>"sessions", :action=>"new"}
signout /signout(.:format) {:controller=>"sessions", :action=>"destroy"}
sessions GET /sessions(.:format) {:action=>"index", :controller=>"sessions"}
sessions POST /sessions(.:format) {:action=>"create", :controller=>"sessions"}
news GET /news/:id(.:format) {:action=>"show", :controller=>"news"}
news PUT /news/:id(.:format) {:action=>"update", :controller=>"news"}
news DELETE /news/:id(.:format) {:action=>"destroy", :controller=>"news"}
comments GET /comments(.:format) {:action=>"index", :controller=>"comments"}
comments POST /comments(.:format) {:action=>"create", :controller=>"comments"}
new_comment GET /comments/new(.:format) {:action=>"new", :controller=>"comments"}
edit_comment GET /comments/:id/edit(.:format) {:action=>"edit", :controller=>"comments"}
comment GET /comments/:id(.:format) {:action=>"show", :controller=>"comments"}
comment PUT /comments/:id(.:format) {:action=>"update", :controller=>"comments"}
comment DELETE /comments/:id(.:format) {:action=>"destroy", :controller=>"comments"}
Mais j'ai l'impression que ma console déconne, vu que j'ai un grand blanc au milieu... En tout cas, là je suis certain que les fichiers/c-c sont complets. Mais je vous avoue que je suis un peu perdu sur mon problème initial.
Bye
RE: form_for soulève une "RoutingError" - Sephi-Chan - 15-09-2010
En utilisant les routes que tu as donné, j'ai :
root /(.:format) {:controller=>"pages", :action=>"home"}
signup /signup(.:format) {:controller=>"users", :action=>"new"}
signin /signin(.:format) {:controller=>"sessions", :action=>"new"}
signout /signout(.:format) {:controller=>"sessions", :action=>"destroy"}
sessions GET /sessions(.:format) {:action=>"index", :controller=>"sessions"}
sessions POST /sessions(.:format) {:action=>"create", :controller=>"sessions"}
new_session GET /sessions/new(.:format) {:action=>"new", :controller=>"sessions"}
edit_session GET /sessions/:id/edit(.:format) {:action=>"edit", :controller=>"sessions"}
session GET /sessions/:id(.:format) {:action=>"show", :controller=>"sessions"}
session PUT /sessions/:id(.:format) {:action=>"update", :controller=>"sessions"}
session DELETE /sessions/:id(.:format) {:action=>"destroy", :controller=>"sessions"}
users GET /users(.:format) {:action=>"index", :controller=>"users"}
users POST /users(.:format) {:action=>"create", :controller=>"users"}
new_user GET /users/new(.:format) {:action=>"new", :controller=>"users"}
edit_user GET /users/:id/edit(.:format) {:action=>"edit", :controller=>"users"}
user GET /users/:id(.:format) {:action=>"show", :controller=>"users"}
user PUT /users/:id(.:format) {:action=>"update", :controller=>"users"}
user DELETE /users/:id(.:format) {:action=>"destroy", :controller=>"users"}
news_index GET /news(.:format) {:action=>"index", :controller=>"news"}
news_index POST /news(.:format) {:action=>"create", :controller=>"news"}
new_news GET /news/new(.:format) {:action=>"new", :controller=>"news"}
edit_news GET /news/:id/edit(.:format) {:action=>"edit", :controller=>"news"}
news GET /news/:id(.:format) {:action=>"show", :controller=>"news"}
news PUT /news/:id(.:format) {:action=>"update", :controller=>"news"}
news DELETE /news/:id(.:format) {:action=>"destroy", :controller=>"news"}
comments GET /comments(.:format) {:action=>"index", :controller=>"comments"}
comments POST /comments(.:format) {:action=>"create", :controller=>"comments"}
new_comment GET /comments/new(.:format) {:action=>"new", :controller=>"comments"}
edit_comment GET /comments/:id/edit(.:format) {:action=>"edit", :controller=>"comments"}
comment GET /comments/:id(.:format) {:action=>"show", :controller=>"comments"}
comment PUT /comments/:id(.:format) {:action=>"update", :controller=>"comments"}
comment DELETE /comments/:id(.:format) {:action=>"destroy", :controller=>"comments"}
Donc il y a toujours quelque chose que tu ne nous dis pas. :p
Sephi-Chan
RE: form_for soulève une "RoutingError" - My Hotel - 15-09-2010
-_- J'ai compris. En fait, j'utilise Aptana Studio 3 et la console intégrée pour taper mes commandes, et faut croire que ça bug. J'ai fait un rake route directement dans la console windows, et j'obtiens :
root /(.:format) {:controller=>"pages", :action=>"home"}
signup /signup(.:format) {:controller=>"users", :action=>"new"}
signin /signin(.:format) {:controller=>"sessions", :action=>"new"}
signout /signout(.:format) {:controller=>"sessions", :action=>"destroy"}
sessions GET /sessions(.:format) {:action=>"index", :controller=>"sessions"}
sessions POST /sessions(.:format) {:action=>"create", :controller=>"sessions"}
new_session GET /sessions/new(.:format) {:action=>"new", :controller=>"sessions"}
edit_session GET /sessions/:id/edit(.:format) {:action=>"edit", :controller=>"sessions"}
session GET /sessions/:id(.:format) {:action=>"show", :controller=>"sessions"}
session PUT /sessions/:id(.:format) {:action=>"update", :controller=>"sessions"}
session DELETE /sessions/:id(.:format) {:action=>"destroy", :controller=>"sessions"}
users GET /users(.:format) {:action=>"index", :controller=>"users"}
users POST /users(.:format) {:action=>"create", :controller=>"users"}
new_user GET /users/new(.:format) {:action=>"new", :controller=>"users"}
edit_user GET /users/:id/edit(.:format) {:action=>"edit", :controller=>"users"}
user GET /users/:id(.:format) {:action=>"show", :controller=>"users"}
user PUT /users/:id(.:format) {:action=>"update", :controller=>"users"}
user DELETE /users/:id(.:format) {:action=>"destroy", :controller=>"users"}
news_index GET /news(.:format) {:action=>"index", :controller=>"news"}
news_index POST /news(.:format) {:action=>"create", :controller=>"news"}
new_news GET /news/new(.:format) {:action=>"new", :controller=>"news"}
edit_news GET /news/:id/edit(.:format) {:action=>"edit", :controller=>"news"}
news GET /news/:id(.:format) {:action=>"show", :controller=>"news"}
news PUT /news/:id(.:format) {:action=>"update", :controller=>"news"}
news DELETE /news/:id(.:format) {:action=>"destroy", :controller=>"news"}
comments GET /comments(.:format) {:action=>"index", :controller=>"comments"}
comments POST /comments(.:format) {:action=>"create", :controller=>"comments"}
new_comment GET /comments/new(.:format) {:action=>"new", :controller=>"comments"}
edit_comment GET /comments/:id/edit(.:format) {:action=>"edit", :controller=>"comments"}
comment GET /comments/:id(.:format) {:action=>"show", :controller=>"comments"}
comment PUT /comments/:id(.:format) {:action=>"update", :controller=>"comments"}
comment DELETE /comments/:id(.:format) {:action=>"destroy", :controller=>"comments"}
Dire que je me suis pris la tête la-dessus. 'Fin bref, mon problème persiste, mais on avance
Bye
P.S : vous pensez que c'est un bug? Si oui, je devrais le signaler à Aptana.
RE: form_for soulève une "RoutingError" - Sephi-Chan - 15-09-2010
Ça vient du nom de ton modèle. Compare les 3 routes vers l'action show : il infère le singulier pour cette route (et pour plusieurs autres), mais là il n'y arrive pas (peut-être pour se protéger d'un mot clé), du coup on se retrouve avec plusieurs routes qui mène au même endroit.
comment GET /comments/:id(.:format) {:action=>"show", :controller=>"comments"}
user GET /users/:id(.:format) {:action=>"show", :controller=>"users"}
news GET /news/:id(.:format) {:action=>"show", :controller=>"news"}
Sephi-Chan
RE: form_for soulève une "RoutingError" - My Hotel - 16-09-2010
Désolé du retard
Ouais, j'ai compris le bug. Je dois tout changer à la mimine je suppose?
Bref, je vais le faire, puis je vous dis quoi.
Merci
|