我要求我必须在每个网址中附加abc/admin
。例如
http://0.0.0.0:3000/abc/admin/admins/sign_in # USING ADMIN AS DEVISE MODEL
http://0.0.0.0:3000/abs/admin/products
http://0.0.0.0:3000/abs/admin/products/:id
http://0.0.0.0:3000/abs/admin/categories
等。现在我尝试了
scope "abc/admin" do
resources :products, :categories
end
它会创建一些URL
,例如:
products GET /abc/admin/products(.:format) products#index
POST /abc/admin/products(.:format) products#create
new_role GET /abc/admin/products/new(.:format) products#new
for Admin
模型我尝试使用
scope "abc/admin" do
devise_for :admins, :controllers => {:sessions=>"admin/sessions", :registrations=>'admin/registrations'}
end
它还会创建URL
,如:
admin_registration POST /abc/admin/admins(.:format) admin/registrations#create
new_admin_registration GET /abc/admin/admins/sign_up(.:format) admin/registrations#new
现在new_admin_registration_path
重定向到http://0.0.0.0:3000/admins/sign_up
它没有考虑范围。我不知道如何在设计URL和其他控制器中实现范围参数。
答案 0 :(得分:0)
@Choco是对的,你应该只声明一次命名空间。然后一切都进入了那一块。
namespace "abc/admin" do
resources :products, :categories
devise_for :admins, :controllers => {:sessions=>"admin/sessions", :registrations=>'admin/registrations'}
end
然后您的路径助手变为new_abc_admin_admin_registration_path。有关信息,请参阅此处:difference between scope and namespace of ruby-on-rails 3 routing