是否可以将 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: 4name: 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])

Rails Models - find_by method