rails路由中的范围不在URL中添加参数

时间:2014-11-20 08:22:32

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-4 devise routes

我要求我必须在每个网址中附加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和其他控制器中实现范围参数。

1 个答案:

答案 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