是否可以将 url 设置为 ":name" 而不是 "models/:id"?
Is it possible to set a url to ":name" instead of "models/:id"?
我有一个模型 "User",它有一个 :name
属性。现在,User "show" 操作由以下路由定义:
get '/users/:id', to: 'users#show', as: 'user'
这意味着具有 id: 4
和 name: Joe
的用户的 "show" 视图将在 localhost:3000/users/4
.
下
有没有办法让 Joe 的 "show" url 变成 localhost:3000/joe
,并且对每个用户都这样做?每个 :name
都是独一无二的。
如果我没看错你的问题,你的意思是:
get '/:name', to: 'users#show', as: 'user'
那应该从根级别的 URL 捕获 :name
属性,但仍然转到同一个控制器。
这是 Rails 路由指南的 link 我认为涵盖了这一点(虽然不是太详细):Rails Routing: dynamic segments
然后提取 :name
属性而不是 :id
属性,将控制器中的代码从 User.find(params[:id])
更改为 User.find_by(name: params[:name])
我有一个模型 "User",它有一个 :name
属性。现在,User "show" 操作由以下路由定义:
get '/users/:id', to: 'users#show', as: 'user'
这意味着具有 id: 4
和 name: Joe
的用户的 "show" 视图将在 localhost:3000/users/4
.
有没有办法让 Joe 的 "show" url 变成 localhost:3000/joe
,并且对每个用户都这样做?每个 :name
都是独一无二的。
如果我没看错你的问题,你的意思是:
get '/:name', to: 'users#show', as: 'user'
那应该从根级别的 URL 捕获 :name
属性,但仍然转到同一个控制器。
这是 Rails 路由指南的 link 我认为涵盖了这一点(虽然不是太详细):Rails Routing: dynamic segments
然后提取 :name
属性而不是 :id
属性,将控制器中的代码从 User.find(params[:id])
更改为 User.find_by(name: params[:name])