2010-05-17 5 views
1

J'ai une ressource: produits dans un espace de noms: boutique, comme ceci:Comment spécifier une action sur une ressource dans un espace de noms dans les rails 3?

namespace :shop do 
    resources :products 
    root :to => 'products#index' 
end 

Lors de l'exécution rake routes il produit les éléments suivants:

edit_shop_product GET /shop/products/:id/edit(.:format) {:action=>"edit", :controller=>"shop/products"} 

Mais quand j'utilise le edit_shop_product_path dans une vue partielle, comme ceci:

<%= button_to "Edit", edit_shop_product_path(product) %> 

Je reçois un ActionController Exception: No route matches "/shop/products/1/edit"

Qu'est-ce qui me manque?

Répondre

1

Ok, j'ai trouvé la réponse moi-même dans la fin. Le problème est la méthode button_to qui par défaut génère une requête POST http. En changeant à un EEG comme ceci:

<%= button_to "Edit", edit_shop_product_path(product), :method => :get %> 

Ou en utilisant la méthode link_to cela fonctionne comme annoncé.

0
  1. Créer un répertoire nommé boutique sous le répertoire controllers/
  2. Créez un fichier rubis nommé products_controller.rb sous le répertoire du magasin
  3. Nom du contrôleur class Shop::ProductsController < BaseController
+0

Tous ceux qui sont déjà en place. L'index, les nouvelles actions et les actions de création fonctionnent comme prévu. C'est juste l'action d'édition qui échoue avec cette erreur lors du rendu de la vue. Merci pour la réponse, cependant! – harald

+0

C'est bizarre. Ça devrait marcher. –

+0

C'est ce que je pensais aussi:) = Je vais voir si j'ai plus de temps pour le déboguer ce week-end. – harald

Questions connexes