Ruby on rails 在rails中将路由URL从随机:id更改为:username
我想以某种方式更改routes.rb文件,以便它更改我当前的URLRuby on rails 在rails中将路由URL从随机:id更改为:username,ruby-on-rails,ruby,ruby-on-rails-3,ruby-on-rails-4,rubygems,Ruby On Rails,Ruby,Ruby On Rails 3,Ruby On Rails 4,Rubygems,我想以某种方式更改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 res
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
在rails 4中,您可以在路线中执行以下操作
resources :amitians, param: :username
如Gregg所述,您可以使用以下方法更改参数的名称: 资源:amitians,param::username 但实际上您只是重命名了一个变量。是否需要id或用户名取决于控制器操作amitiansshow:
@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等,都使用REST标准,该标准使用数字ID
如果您想使用用户名而不是ID,则必须停止依赖这些方法并更改控制器和视图,除了你的路由文件。这个问题非常类似于:建议使用友好的id我不觉得友好的id gem是我想要的东西我试过了,但没有改变任何东西url仍然是一样的