J’ai un espace de noms dans mes routes.rb
namespace :businesses do resources :registration end
Mon contrôleur se trouve dans un sous-répertoire entersockets / registration_controller.
def new @business = Business.new end
À mon avis, je veux faire cette form_for @business do |f| ...
form_for @business do |f| ...
mais j’obtiens l’erreur suivante:
No route matches {:controller=>"businesses", :action=>"create"}
Redémarré le serveur et je reçois aussi ceci:
undefined method
business_path ‘pour # `
Voici mes routes de râteau:
home_index GET /home/index(.:format) {:action=>"index", :controller=>"home"} new_user_session GET /users/sign_in(.:format) {:action=>"new", :controller=>"devise/sessions"} user_session POST /users/sign_in(.:format) {:action=>"create", :controller=>"devise/sessions"} destroy_user_session GET /users/sign_out(.:format) {:action=>"destroy", :controller=>"devise/sessions"} user_password POST /users/password(.:format) {:action=>"create", :controller=>"devise/passwords"} new_user_password GET /users/password/new(.:format) {:action=>"new", :controller=>"devise/passwords"} edit_user_password GET /users/password/edit(.:format) {:action=>"edit", :controller=>"devise/passwords"} user_password PUT /users/password(.:format) {:action=>"update", :controller=>"devise/passwords"} cancel_user_registration GET /users/cancel(.:format) {:action=>"cancel", :controller=>"devise/registrations"} user_registration POST /users(.:format) {:action=>"create", :controller=>"devise/registrations"} new_user_registration GET /users/sign_up(.:format) {:action=>"new", :controller=>"devise/registrations"} edit_user_registration GET /users/edit(.:format) {:action=>"edit", :controller=>"devise/registrations"} user_registration PUT /users(.:format) {:action=>"update", :controller=>"devise/registrations"} user_registration DELETE /users(.:format) {:action=>"destroy", :controller=>"devise/registrations"} 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"} full_tree_admin_categories GET /admin/categories/full_tree(.:format) {:action=>"full_tree", :controller=>"admin/categories"} admin_categories GET /admin/categories(.:format) {:action=>"index", :controller=>"admin/categories"} admin_categories POST /admin/categories(.:format) {:action=>"create", :controller=>"admin/categories"} new_admin_category GET /admin/categories/new(.:format) {:action=>"new", :controller=>"admin/categories"} edit_admin_category GET /admin/categories/:id/edit(.:format) {:action=>"edit", :controller=>"admin/categories"} admin_category GET /admin/categories/:id(.:format) {:action=>"show", :controller=>"admin/categories"} admin_category PUT /admin/categories/:id(.:format) {:action=>"update", :controller=>"admin/categories"} admin_category DELETE /admin/categories/:id(.:format) {:action=>"destroy", :controller=>"admin/categories"} businesses_registration_index GET /businesses/registration(.:format) {:action=>"index", :controller=>"businesses/registration"} businesses_registration_index POST /businesses/registration(.:format) {:action=>"create", :controller=>"businesses/registration"} new_businesses_registration GET /businesses/registration/new(.:format) {:action=>"new", :controller=>"businesses/registration"} edit_businesses_registration GET /businesses/registration/:id/edit(.:format) {:action=>"edit", :controller=>"businesses/registration"} businesses_registration GET /businesses/registration/:id(.:format) {:action=>"show", :controller=>"businesses/registration"} businesses_registration PUT /businesses/registration/:id(.:format) {:action=>"update", :controller=>"businesses/registration"} businesses_registration DELETE /businesses/registration/:id(.:format) {:action=>"destroy", :controller=>"businesses/registration"} root /(.:format) {:action=>"index", :controller=>"home"}
Si vous avez des routes avec des noms, la meilleure façon est de:
class Admin::BusinessesController < ApplicationController def new @business = Business.new end end
dans routes.rb:
namespace :admin do resources :businesses end
En vue:
form_for [:admin, @business] do |f|...
La documentation: http://guides.rubyonrails.org/form_helpers.html section 2.3.1 Traitement des espaces de noms
En ce qui concerne votre cas:
Dans routes.rb tout est o'k. Dans la vue, vous devez écrire l'URL explicitement car vous avez une variable dans le contrôleur autre que le nom du contrôleur:
form_for @business, :url => business_registration_path do |f|...
Je suppose que dans le domaine des entresockets / registration_controller, vous avez quelque chose comme ceci:
class Businesses::RegistrationController < ApplicationController def new @business = Business.new end end
Et une remarque: je ne créerais pas registration_controller pour enregistrer une nouvelle entreprise. Je pense que le maintien des actions liées à l'entreprise dans business_controller est beaucoup plus clair.
En fait, je pense qu’il y a une meilleure solution.
form_for [:admin, @business]
Le problème avec le fait de donner une URL est que si vous abstenez le formulaire en tant que vue partielle, vous devrez gérer les situations “créer” et “mettre à jour”. Ils pointent vers des URL différentes et finissent par fournir le contrôleur @url
.