问题描述
我的 routes.rb 中有命名空间
I have namespace in my routes.rb
namespace :businesses do
resources :registration
end
我的控制器位于 business/registration_controller 子目录中.
My controller is in a subdirectory businesses/registration_controller.
def new
@business = Business.new
end
在我看来,我想这样做 form_for @business do |f|...
但我收到以下错误:
In my view, I want to do this form_for @business do |f| ...
but I am getting the following error:
没有路由匹配 {:controller=>"businesses", :action=>"create"}
重新启动服务器,我也得到这个:
Restarted the server and I'm also getting this:
未定义的方法
businesses_path' for #<#:0x10339bb20>`
undefined method
businesses_path' for #<#:0x10339bb20>`
这是我的佣金路线:
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"}
推荐答案
如果你有命名空间路由,最好的方法是:
If you have namespaced routes the best way is:
class Admin::BusinessesController < ApplicationController
def new
@business = Business.new
end
end
在 routes.rb 中:
in routes.rb:
namespace :admin do
resources :businesses
end
在视图中:
form_for [:admin, @business] do |f|...
文档:http://guides.rubyonrails.org/form_helpers.html 部分 2.3.1 处理命名空间
The Docs: http://guides.rubyonrails.org/form_helpers.html section 2.3.1 Dealing with Namespaces
关于您的情况:
在 routes.rb 中一切正常.在视图中你应该明确写 url 因为你在控制器中有变量而不是控制器名称:
In routes.rb everything is o'k. In the view you should write url explicitly because you have variable in controller other than controller name:
form_for @business, :url => business_registration_path do |f|...
我想在 business/registration_controller 中你有这样的东西:
I suppose that in businesses/registration_controller you have something like this:
class Businesses::RegistrationController < ApplicationController
def new
@business = Business.new
end
end
还有一句话:我不会创建 registration_controller 来注册新业务.我认为在 business_controller 中保留与业务相关的操作要清晰得多.
And one remark: I wouldn't create registration_controller for registering a new business. I think that keeping business related actions in business_controller is much clearer.
这篇关于Rails 路由命名空间和 form_for的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!