首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >拥有用户名而不是id,然后嵌套路由/用户/:id/nest_routes到/ username / nested

拥有用户名而不是id,然后嵌套路由/用户/:id/nest_routes到/ username / nested
EN

Stack Overflow用户
提问于 2017-01-24 10:59:25
回答 1查看 81关注 0票数 0

你好,我有很多路线,如下所示

代码语言:javascript
复制
  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/nested_route

例如,编辑传送方法视图生成以下内容

/users/1/shipping_methods/11/edit

我如何使所有这些路线产生这样的:

/username/nested_route

例如,上面的编辑传送方法视图应该生成以下内容:

/username/shipping_methods/11/edit

EN

回答 1

Stack Overflow用户

发布于 2017-01-24 11:36:32

这是做这个的方法之一。对path资源重写users资源,对子资源使用collection。它给了你路径/:user_id/shipping_methods/new

代码语言:javascript
复制
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

覆盖to_param方法使User模型在路由器中使用username而不是id

代码语言:javascript
复制
def to_param
  self.username.parameterize
end

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41826438

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档