如何为 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>