我希望users#show
操作可在属性用户名下而不是user_id下使用。
因此,如果我访问某个用户,我希望该网址显示类似users/some_username
而不是users/22
我的路线:
resources :users, only: %i(show edit update) do
member do
get :follows
get :statistic
get :my_topics, path: :topics
end
end
答案 0 :(得分:1)
您可以向路由添加param
选项。
resources :users, param: :name, only: %i(show edit update) do
member do
get :follows
get :statistic
get :my_topics, path: :topics
end
end
使用rake routes | grep user
将导致以下结果。
follows_user GET /users/:name/follows(.:format) users#follows
statistic_user GET /users/:name/statistic(.:format) users#statistics
my_topics_user GET /users/:name/topics(.:format) users#my_topics
edit_user GET /users/:name/edit(.:format) users#edit
user GET /users/:name(.:format) users#show
PATCH /users/:name(.:format) users#update
PUT /users/:name(.:format) users#update
答案 1 :(得分:1)
只是很好地扩展了罗伯特的答案:另一种方法是使用专门用于执行此操作的宝石。许多选择之一可能是https://github.com/norman/friendly_id。
其要点是在模型中生成的字段添加到用户模型(此处为slug
,其中包含url段)。为了获取记录,使用了一种方法,该方法可以采用以前的id或段塞。
在您的情况下,除非您考虑对其他路线和模型具有相同的网址要求,否则这可能是一个过大的选择。
旁注:我与这个项目没有任何关系,我之前只使用过几次。