我想以某种方式更改我的route.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
如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错误时,直接在根目录下设置参数会给您造成很多混乱。甚至更糟的是,如果用户选择用户名“登录”或“注册”怎么办?您的注册页面将无法访问,或者该用户页面将无法访问。
我还要指出的是,导轨方便的方法,如resources
,Amitian.find
,url_for @amitian
,link_to @amitian
等所有使用它使用数字ID的REST标准。
如果要使用用户名而不是ID,则除了路由文件之外,还必须停止依赖这些方法并更改控制器和视图。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句