我想这样做:
site.com/username
而不是:
site.com/users/1
设置路由和用户控制器的最佳方法是什么?
答案 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
&有其他内容类型,你需要一种方法来处理它们而不会发生冲突。