我想以某种方式更改我的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
答案 0 :(得分:3)
正如Gregg所说,您可以使用以下命令更改参数名称:
resources :amitians, param: :username
但你基本上只是重命名一个变量。是否期望id或用户名是在控制器动作amitians#show:
中确定的@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参数会给您带来很多困惑。或者更糟糕的是,如果用户选择用户名“登录”或“注册”怎么办?您的注册页面将无法访问,或者该用户的页面将无法访问。
我还应该指出,诸如resources
,Amitian.find
,url_for @amitian
,link_to @amitian
之类的rails便捷方法都使用了使用数字ID的REST标准。< / p>
如果您想使用用户名而不是ID,除了路线文件之外,您还必须停止依赖这些方法并更改控制器和视图。
答案 1 :(得分:0)
在rails 4中,您可以在路径中执行以下操作
resources :amitians, param: :username