修改rails路由以显示用户名而不是id

时间:2013-10-12 05:29:04

标签: ruby-on-rails

我想这样做:

  

site.com/username

而不是:

  

site.com/users/1

设置路由和用户控制器的最佳方法是什么?

3 个答案:

答案 0 :(得分:4)

我假设这是一个GET请求。所以它会像:

路线定义

get '/:username', to: 'users#show', as: 'user_by_name'

用途:

link_to 'Show', user_by_name_path(user.username)
user中的

user.username应替换为实际变量。

官方指南中的Non Resourceful Routes更多内容。

如果要从users资源覆盖此内容,可以按照此主题https://stackoverflow.com/a/18261912/383912进行操作。您需要为show路线使用'member'而不是'collection'。

答案 1 :(得分:2)

您可以将路径设置为路径:

resources :users, path: '', only: [ :show, :edit, :update, :destroy ]

如果您想要索引页面并为用户创建操作以映射到:only,则可以省略/

查看friendly_id以便轻松使用用户名作为路线中的ID。

确保在用户路由之前定义其他路由,例如/about,否则它们将被解释为用户ID。

答案 2 :(得分:1)

您可能想要查看的内容: How to create app-wide slug routing for Rails app?

如果您要转到domain.com/:username&有其他内容类型,你需要一种方法来处理它们而不会发生冲突。