如何为用户配置路由

时间:2019-10-22 10:02:38

标签: ruby-on-rails ruby routes

我希望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

2 个答案:

答案 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或段塞。

在您的情况下,除非您考虑对其他路线和模型具有相同的网址要求,否则这可能是一个过大的选择。

旁注:我与这个项目没有任何关系,我之前只使用过几次。