Ruby on rails Rails路由到用户名而不是id

Ruby on rails Rails路由到用户名而不是id,ruby-on-rails,ruby,Ruby On Rails,Ruby,我正在尝试将rails路由从/users/1更改为/username。我目前设置了它,以便它可以用于显示和编辑操作。实际问题是,当我使用以下命令更新用户时: <%= form_for @user do |f|%> 编辑: 啊!这解决了问题: match '/:id', :to => "users#show", :as => :user, :via => :get 在您的用户模型中: def to_param username end 默认情况下,Activ

我正在尝试将rails路由从/users/1更改为/username。我目前设置了它,以便它可以用于显示和编辑操作。实际问题是,当我使用以下命令更新用户时:

<%= form_for @user do |f|%>
编辑:

啊!这解决了问题:

match '/:id', :to => "users#show", :as => :user, :via => :get
在您的用户模型中:

def to_param
  username
end

默认情况下,ActiveRecord对象上的
to_param
方法仅使用对象的ID。通过将此代码放入模型中,您将覆盖ActiveRecord默认值,因此当您链接到用户时,它将使用
用户名
作为参数,而不是用户模型中的
id
覆盖
to_param
方法以返回您想要在URL中使用的内容

class User < ActiveRecord::Base
  def to_param
    username
  end
end
class用户

在控制器中,而不是使用
User.find(params[:id])
您现在需要使用
User.find by_username(params[:id])
如果不想,您不必重写
到_param
,只需在表单标记中指定如下内容:

<%= form_for @user, :url => user_path(:id => @user.username) do |f|%>
user_路径(:id=>@user.username)do | f |%>

您可以使用友好的\u id gem:

在路由文件中指定
param::username
是否更好?因为该参数不应该再被称为
:id
,而是应该被称为
:username
,这会影响应用程序中的其他内容还是仅仅影响路由?
<%= form_for @user, :url => user_path(:id => @user.username) do |f|%>