我想以某种方式更改routes.rb文件,以便它更改我当前的url
localhost:3000/amitian/1
到本地主机: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
但实际上你只是在重命名一个变量无论您希望的是id还是用户名都是在控制器操作amitias中确定的,显示:
@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错误时,将参数直接从根目录下删除会给您带来很多混乱。或者更糟的是,如果用户选择用户名“login”或“register”您的注册页面将无法访问,或者该用户的页面将无法访问。
我还应该指出,rails的方便方法,如
resources
、Amitian.find
、url_for @amitian
、link_to @amitian
等,都使用使用数字id的rest标准。如果要使用用户名而不是id,则除了路由文件外,还必须停止依赖这些方法并更改控制器和视图。