2010-10-26 7 views
1

J'ai eu ce travail hier, je ne sais pas ce que j'ai fait pour le casser.Rails 3 erreur de routage

Voici les itinéraires pour un contrôleur RESTful:

brand_responsibilities GET /brands/:brand_id/responsibilities(.:format)   {:action=>"index", :controller=>"responsibilities"} 
brand_responsibilities POST /brands/:brand_id/responsibilities(.:format)   {:action=>"create", :controller=>"responsibilities"} 
new_brand_responsibility GET /brands/:brand_id/responsibilities/new(.:format)  {:action=>"new", :controller=>"responsibilities"} 
edit_brand_responsibility GET /brands/:brand_id/responsibilities/:id/edit(.:format) {:action=>"edit", :controller=>"responsibilities"} 
brand_responsibility  GET /brands/:brand_id/responsibilities/:id(.:format)  {:action=>"show", :controller=>"responsibilities"} 
brand_responsibility  PUT /brands/:brand_id/responsibilities/:id(.:format)  {:action=>"update", :controller=>"responsibilities"} 
brand_responsibility  DELETE /brands/:brand_id/responsibilities/:id(.:format)  {:action=>"destroy", :controller=>"responsibilities"} 

Ma forme ressemble à ceci:

<%= form_for :responsibility, :remote => true do |f| %> 
    <%= f.hidden_field :access_request_id, :value => ar.id %> 
    <%= f.hidden_field :user_id, :value => user.id %> 
    <%= f.hidden_field :brand_id, :value => @brand.id %> 
    <%= f.submit %> 
<% end %> 

Mais je reçois un 404 maintenant avec ce message journal:

Started POST "/brands/30/responsibilities" for 127.0.0.1 at Tue Oct 26 10:47:17 -0400 2010 

ActionController::RoutingError (No route matches "/brands/30/responsibilities"): 

Il semble que l'itinéraire correspond à moi! Qu'est-ce que je rate?

Mise à jour: J'ai essayé aussi cela dans la console:

rs.recognize_path '/brands/30/responsibilities', :method => :post 

et la réponse est:

=> {:controller=>"responsibilities", :brand_id=>"30", :action=>"create"} 

Quel est mon problème?

MISE À JOUR # 2:

J'ai trouvé la cause, mais je ne sais pas pourquoi il est la cause. J'ai un autre champ:

<%= button_to "Deny", brand_responsibilities_path(@brand, :ar => ar), :remote => true, :method => :delete %> 

Que j'étais inclus dans le formulaire. Je l'ai laissé par souci de concision avant parce que je ne pensais pas que c'était important. Je vois que c'était une mauvaise idée.

Est-ce que quelqu'un sait pourquoi la présence de cette ligne dans le formulaire provoque l'erreur de routage bizarre?

+3

Bizarre! Avec les informations que vous avez fournies, cela devrait fonctionner. Avez-vous redémarré votre serveur après avoir ajouté les routes à 'config/routes.rb'? – Ariejan

+2

Cela n'aide probablement pas votre problème, mais est bon à savoir ... vous pouvez faire <% form_for [@brand,: responsabilité]%> pour éviter d'avoir un champ caché en passant l'identifiant de la marque. Cela générera également l'action/brands /: id/responsibilities dans le formulaire. En dehors de cela, la seule explication de votre problème est qu'il y a une route plus haute en priorité (plus bas dans la liste des routes) en remplaçant celles que vous avez collées. – jenjenut233

+0

Oui, j'ai redémarré et tout. J'ai reconfiguré le formulaire à votre exemple Jen, et je l'ai vu aussi dans le screencast de Controller in Rails 3 de Bates. Toujours la même chose. Mon parcours est: ressources: Les marques ne ressources: responsabilités fin Il n'y a rien générique ci-dessus ou en dessous dans le routes.rb. – AKWF

Répondre

1

Il semble que je sois un idiot. Laisser de côté cette information cruciale était une mauvaise idée. Avoir un bouton_to dans un formulaire est un non-non, il crée un formulaire dans un formulaire.

Rookie erreur. Dommage que je le fais depuis longtemps. Upvotes aux commentateurs, désolé de perdre votre temps précieux.