Rails管理命名空间中非管理模型的自动命名空间URL

时间:2017-09-16 04:34:43

标签: ruby-on-rails

我想在管理界面中管理一个名为User的模型。 管理界面路由看起来像

namespace :admin do
  resources :users
end

当我在像link_to 'Show', @user这样的视图中创建链接时,我得到了 错误undefined method 'user_path'

如何自动将该网址变为admin_user_path(即/admin/users/:id 而不是/users/:id

目前我无处不在(索引视图,显示视图,编辑,表单网址等): link_to 'Show', admin_user_url(@user)

1 个答案:

答案 0 :(得分:0)

要链接到命名空间路由,请传递一个数组:

link_to 'Show', [:admin, @user]

如果您想要的是将路线嵌套在/admin下而不向路线助手添加管理员前缀,请使用scope代替namespace

scope :admin, module: :admin do
  resources :users
end
   Prefix Verb   URI Pattern                     Controller#Action
    users GET    /admin/users(.:format)          admin/users#index
          POST   /admin/users(.:format)          admin/users#create
 new_user GET    /admin/users/new(.:format)      admin/users#new
edit_user GET    /admin/users/:id/edit(.:format) admin/users#edit
     user GET    /admin/users/:id(.:format)      admin/users#show
          PATCH  /admin/users/:id(.:format)      admin/users#update
          PUT    /admin/users/:id(.:format)      admin/users#update
          DELETE /admin/users/:id(.:format)      admin/users#destroy

如果您只有/admin/users路线而不是/users路线,则表示资源的方式不同,这是有意义的 - 在这种情况下,请使用link_to 'Show', [:admin, @user]消除歧义。