我想以某种方式更改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的方便方法,如resourcesAmitian.findurl_for @amitianlink_to @amitian等,都使用使用数字id的rest标准。
如果要使用用户名而不是id,则除了路由文件外,还必须停止依赖这些方法并更改控制器和视图。

10-08 17:28