JeuWeb - Crée ton jeu par navigateur
form_for soulève une "RoutingError" - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : form_for soulève une "RoutingError" (/showthread.php?tid=2549)

Pages : 1 2


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 Smile ).

Merci d'avance Wink

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 Wink

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 Confusedessions
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 Wink


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. Smile


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 Confusedessions
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 Wink

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 Wink

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 Wink