在 rails 中将路由 URL 从随机 :id 更改为 :username
change routes URL from a random :id to :username in rails
我想以某种方式更改我的 routes.rb 文件,以便它更改我当前的网址
localhost:3000/amitian/1
到localhost:3000/用户名
我会提供我的routes.rb文件以供参考
Rails.application.routes.draw do
devise_for :amitians
root 'home#index'
resources :amitians do
member do
get :following, :followers
end
end
resources :confessions do
member do
get 'like' , to: 'confessions#upvote'
get 'dislike' , to: 'confessions#downvote'
end
resources :confessioncomments
end
resources :relationships, only: [:create, :destroy]
end
在rails4中你可以在route
中进行以下操作
resources :amitians, param: :username
如 Gregg 所述,您可以使用以下方法更改参数名称:
resources :amitians, param: :username
但实际上您只是在重命名一个变量。在控制器操作 amitians#show:
中确定您需要 ID 还是用户名
@amitian = Amitian.find(param[:id]) # Treat :id as id
@amitian = Amitian.find_by_username(param[:id]) # Treat :id as username
现在,如果您想专门路由到 /:username
而不是 /amitians/:username
,则必须覆盖该资源路由:
resources :amitians, except: [:show] do
member do
get :following, :followers
end
end
get '/:username', to: 'amitians#show'
但是,我不建议这样做。当用户输入不正确的 url 并获得用户页面而不是 404 错误时,将参数直接设置为 root 会导致很多混乱。或者更糟糕的是,如果用户选择用户名 'login' 或 'register' 怎么办?要么无法访问您的注册页面,要么无法访问该用户的页面。
我还应该指出 rails 便利方法,例如 resources
、Amitian.find
、url_for @amitian
、link_to @amitian
等都使用 REST 标准使用数字 ID。
如果您想使用用户名而不是 ID,除了路由文件之外,您还必须停止依赖这些方法并更改您的控制器和视图。
我想以某种方式更改我的 routes.rb 文件,以便它更改我当前的网址
localhost:3000/amitian/1
到localhost:3000/用户名
我会提供我的routes.rb文件以供参考
Rails.application.routes.draw do
devise_for :amitians
root 'home#index'
resources :amitians do
member do
get :following, :followers
end
end
resources :confessions do
member do
get 'like' , to: 'confessions#upvote'
get 'dislike' , to: 'confessions#downvote'
end
resources :confessioncomments
end
resources :relationships, only: [:create, :destroy]
end
在rails4中你可以在route
中进行以下操作resources :amitians, param: :username
如 Gregg 所述,您可以使用以下方法更改参数名称:
resources :amitians, param: :username
但实际上您只是在重命名一个变量。在控制器操作 amitians#show:
中确定您需要 ID 还是用户名@amitian = Amitian.find(param[:id]) # Treat :id as id
@amitian = Amitian.find_by_username(param[:id]) # Treat :id as username
现在,如果您想专门路由到 /:username
而不是 /amitians/:username
,则必须覆盖该资源路由:
resources :amitians, except: [:show] do
member do
get :following, :followers
end
end
get '/:username', to: 'amitians#show'
但是,我不建议这样做。当用户输入不正确的 url 并获得用户页面而不是 404 错误时,将参数直接设置为 root 会导致很多混乱。或者更糟糕的是,如果用户选择用户名 'login' 或 'register' 怎么办?要么无法访问您的注册页面,要么无法访问该用户的页面。
我还应该指出 rails 便利方法,例如 resources
、Amitian.find
、url_for @amitian
、link_to @amitian
等都使用 REST 标准使用数字 ID。
如果您想使用用户名而不是 ID,除了路由文件之外,您还必须停止依赖这些方法并更改您的控制器和视图。