是否可以将网址设置为“:name”而不是“models /:id”?

时间:2015-03-15 04:11:11

标签: ruby-on-rails ruby url routing

我有一个模型" User",它有:name属性。现在,用户"显示"动作由以下路线定义:

get '/users/:id', to: 'users#show', as: 'user'

这意味着"显示" id: 4name: Joe的用户的视图将位于localhost:3000/users/4

之下

有没有办法可以让Joe"显示" url是localhost:3000/joe,并为每个用户执行相同的操作?每个:name都是唯一的。

1 个答案:

答案 0 :(得分:2)

如果我正确地阅读了您的问题,您的意思是:

get '/:name', to: 'users#show', as: 'user'

这应该从根级别的URL捕获:name属性,但仍然转到同一个控制器。

这里是指向Rails路由指南的链接,我认为它涵盖了这一点(尽管不是太详细):Rails Routing: dynamic segments

然后,要提取:name属性而不是:id属性,请将控制器中的代码从User.find(params[:id])更改为User.find_by(name: params[:name])

Rails Models - find_by method