Ich habe einen Namespace in meiner route.rb
namespace :businesses do
resources :registration
end
Mein Controller befindet sich in einem Unterverzeichnis business / register_controller.
def new
@business = Business.new
end
Meiner Ansicht nach möchte ich dies tun form_for @business do |f| ...
, erhalte jedoch den folgenden Fehler:
No route matches {:controller=>"businesses", :action=>"create"}
Der Server wurde neu gestartet und ich erhalte auch Folgendes:
undefined method
business_path 'für # <#: 0x10339bb20> `
Hier sind meine Rechenrouten:
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"}
ruby-on-rails
Dex
quelle
quelle
Antworten:
Wenn Sie Routen mit Namespace haben, ist der beste Weg:
class Admin::BusinessesController < ApplicationController def new @business = Business.new end end
in route.rb:
namespace :admin do resources :businesses end
Im Hinblick auf:
form_for [:admin, @business] do |f|...
Die Dokumente: http://guides.rubyonrails.org/form_helpers.html Abschnitt 2.3.1 Umgang mit Namespaces
In Bezug auf Ihren Fall:
In route.rb ist alles in Ordnung. In der Ansicht sollten Sie die URL explizit schreiben, da Sie im Controller eine andere Variable als den Controller-Namen haben:
form_for @business, :url => business_registration_path do |f|...
Ich nehme an, dass Sie in business / register_controller so etwas haben:
class Businesses::RegistrationController < ApplicationController def new @business = Business.new end end
Und eine Bemerkung: Ich würde keinen Registrierungs-Controller für die Registrierung eines neuen Unternehmens erstellen. Ich denke, dass es viel klarer ist, geschäftsbezogene Aktionen in business_controller zu behalten.
quelle
undefined method
business_businesses_path 'für # <# <Class: 0x103385d70>: 0x103384088> `redirect_to admin_business_path(@business)
oder vielleichtredirect_to [:admin, @business]
?Eigentlich denke ich, dass es eine bessere Lösung gibt.
form_for [:admin, @business]
Das Problem beim Angeben einer URL besteht darin, dass Sie sich mit Situationen zum Erstellen und Aktualisieren befassen müssen, wenn Sie das Formular als Teilansicht abstrahieren. Sie verweisen auf verschiedene URLs und stellen am Ende den
@url
In-Controller bereit .quelle