如何为 rails 中的嵌套路由指定自定义名称
How to give custom names to nested routes in rails
我有一个 RoR 应用程序,我想在其中应用自定义路由名称,现在我有这个:
localhost:3000/users/:id/groups/:id
我想要类似的东西
localhost:3000/users/username/groups/groupname
到目前为止,我已经能够为用户创建路线,我最终得到:
localhost:3000/users/username
我通过将 to_param
添加到我的用户模型中来做到这一点,但是一旦我点击进入我的组,它就会返回到 :id
而不是用户名。
我也尝试将 to_param
应用到我的组模型中,但它什么也没做。
这些是我的路线:
Rails.application.routes.draw do
devise_for :users
devise_scope :user do get '/users/sign_out' => 'devise/sessions#destroy' end
resources :users, only: [:index, :show] do
resources :groups, only: [:index, :show, :new, :create]
resources :entities, only: [:index, :show, :new, :create]
end
root "users#index"
end
所以我不知道如何实现,是路由文件中的问题吗?还是在模型中?
从rails5开始你可以使用:param
指定不同的标识符
resources :users, param: :username do
resources :groups, param: :groupname
end
我相信这会给你users/<username>/groups/<groupname>
。
我有一个 RoR 应用程序,我想在其中应用自定义路由名称,现在我有这个:
localhost:3000/users/:id/groups/:id
我想要类似的东西
localhost:3000/users/username/groups/groupname
到目前为止,我已经能够为用户创建路线,我最终得到:
localhost:3000/users/username
我通过将 to_param
添加到我的用户模型中来做到这一点,但是一旦我点击进入我的组,它就会返回到 :id
而不是用户名。
我也尝试将 to_param
应用到我的组模型中,但它什么也没做。
这些是我的路线:
Rails.application.routes.draw do
devise_for :users
devise_scope :user do get '/users/sign_out' => 'devise/sessions#destroy' end
resources :users, only: [:index, :show] do
resources :groups, only: [:index, :show, :new, :create]
resources :entities, only: [:index, :show, :new, :create]
end
root "users#index"
end
所以我不知道如何实现,是路由文件中的问题吗?还是在模型中?
从rails5开始你可以使用:param
指定不同的标识符
resources :users, param: :username do
resources :groups, param: :groupname
end
我相信这会给你users/<username>/groups/<groupname>
。