Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在rails中将路由URL从随机:id更改为:username_Ruby On Rails_Ruby_Ruby On Rails 3_Ruby On Rails 4_Rubygems - Fatal编程技术网

Ruby on rails 在rails中将路由URL从随机:id更改为:username

Ruby 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

我想以某种方式更改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

在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仍然是一样的