【问题标题】:scope in rails routes not prepending paramter in URLRails 路由中的范围未在 URL 中添加参数
【发布时间】:2014-11-20 08:22:31
【问题描述】:

我有一个要求,我必须在每个 url 中附加 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

对于我尝试使用的Admin 模型

scope "abc/admin" do
    devise_for :admins, :controllers => {:sessions=>"admin/sessions", :registrations=>'admin/registrations'}
end

它还创建URL like:

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 中为设计以及其他控制器实现范围参数。

【问题讨论】:

  • 你可以像namespace "abc/admin" do devise_for :admins, :controllers => {:sessions=>"admin/sessions", :registrations=>'admin/registrations'} end一样使用namespace一次尝试`

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


【解决方案1】:

@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

【讨论】:

  • 好吧,我得到rake aborted! ArgumentError: Invalid route name: 'abc/admin_products' 错误。如何解决此错误?
  • 你使用了什么路径?对于产品,它将是:abc_admin_products_path
猜你喜欢
  • 2012-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-25
  • 2011-06-21
  • 1970-01-01
  • 2021-05-27
  • 2017-08-19
相关资源
最近更新 更多