我有一个模型" User",它有:name
属性。现在,用户"显示"动作由以下路线定义:
get '/users/:id', to: 'users#show', as: 'user'
这意味着"显示" id: 4
和name: Joe
的用户的视图将位于localhost:3000/users/4
。
有没有办法可以让Joe"显示" url是localhost:3000/joe
,并为每个用户执行相同的操作?每个:name
都是唯一的。
答案 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])