Ruby on rails 使用用户名而不是id,然后嵌套路由/users/:id/nest\u路由到/username/nested\u路由

Ruby on rails 使用用户名而不是id,然后嵌套路由/users/:id/nest\u路由到/username/nested\u路由,ruby-on-rails,ruby,Ruby On Rails,Ruby,您好,我有大量的路线,如下所示 resources :users do resources :shipping_methods, only: [:new, :create, :edit, :update, :destroy] resources :cart_items, only: [:create, :index, :destroy] resources :relationships, only: [:create, :destroy] resources

您好,我有大量的路线,如下所示

  resources :users do
    resources :shipping_methods, only: [:new, :create, :edit, :update, :destroy]
    resources :cart_items, only: [:create, :index, :destroy]
    resources :relationships, only: [:create, :destroy]
    resources :addresses, only: [:new, :create, :edit, :update, :destroy]
  end
它们都产生了下面的路线

/users/:id/嵌套路由

例如,“编辑装运方法”视图会生成以下内容

  resources :users do
    resources :shipping_methods, only: [:new, :create, :edit, :update, :destroy]
    resources :cart_items, only: [:create, :index, :destroy]
    resources :relationships, only: [:create, :destroy]
    resources :addresses, only: [:new, :create, :edit, :update, :destroy]
  end
/users/1/shipping\u methods/11/edit

我如何使所有这些路线产生这种效果:

/username/nested_路线

例如,上面的“编辑装运方法”视图应生成以下内容:


/username/shipping\u methods/11/edit

这是一种方法。为
用户
资源覆盖
路径
,并为子资源使用
集合
。它为您提供路径
/:user\u id/shipping\u methods/new

resources :users, path: ':user_id' do
  collection do
    resources :shipping_methods, only: [:new, :create, :edit, :update, :destroy]
    resources :cart_items, only: [:create, :index, :destroy]
    resources :relationships, only: [:create, :destroy]
    resources :addresses, only: [:new, :create, :edit, :update, :destroy]
  end
end
覆盖
到_param
方法,以便
用户
模型在路由器中使用
用户名
而不是
id

def to_param
  self.username.parameterize
end

要在子路由器中查找用户,请使用
user.find_by(username:params[:user\u id]
这是一种方法。为
用户
资源覆盖
路径
,并为子资源使用
集合
。它为您提供路径
/:user\u id/shipping\u方法/new

resources :users, path: ':user_id' do
  collection do
    resources :shipping_methods, only: [:new, :create, :edit, :update, :destroy]
    resources :cart_items, only: [:create, :index, :destroy]
    resources :relationships, only: [:create, :destroy]
    resources :addresses, only: [:new, :create, :edit, :update, :destroy]
  end
end
覆盖
到_param
方法,以便
用户
模型在路由器中使用
用户名
而不是
id

def to_param
  self.username.parameterize
end

要在子路由器中查找用户,请使用
user.find_by(用户名:params[:user_id]

如果您有一个
当前用户
方法,则创建一个不使用GET
:id
参数的自定义路由,而使用
当前用户.id
来查找用户发送方法。另一种方法是使用gem来创建漂亮的URL,比如如果您有
当前用户
方法,则创建一个不使用的自定义路由不要使用GET
:id
参数,而是使用
current_user.id
来查找用户发送的方法。另一种方法是使用gem作为漂亮的URL,如