Ruby on rails Rails路由到用户名而不是id
我正在尝试将rails路由从/users/1更改为/username。我目前设置了它,以便它可以用于显示和编辑操作。实际问题是,当我使用以下命令更新用户时: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
<%= 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|%>