隐藏网址栏中的用户ID

use*_*136 7 ruby-on-rails header

在我的rails应用程序中,我目前有一大堆用户,每个用户都有一个注册用户ID.

如果我进入我的用户索引并单击用户显示页面,我会得到以下示例标题.

本地主机:3000 /用户/ 3

现在我不喜欢这个,因为它很容易让人们跳过标题中的用户.

我将如何进行以下操作,以便它显示user.username字段,例如

本地主机:3000 /用户/ adamwest

cut*_*ion 9

您可以to_param在User模型上定义方法.

class User
  ...
  def to_param
    name
  end
  ...
end
Run Code Online (Sandbox Code Playgroud)

然后,每个生成的URL将具有name而不是id用户标识符.

sid = User.new :name => 'sid'
user_path(sid) #=> "/users/sid"
Run Code Online (Sandbox Code Playgroud)

当然,在控制器中,您必须按名称查找用户.

class UsersController
  ...
  def show
    @user = User.find_by_name(params[:id])
  end
  ...
end
Run Code Online (Sandbox Code Playgroud)

我还建议你看看friendly_id gem.

FriendlyId是ActiveRecord的段塞和永久插件的"瑞士军队推土机".它允许您创建漂亮的URL并使用人性化的字符串,就像它们是ActiveRecord模型的数字ID一样.

  • 如果`User#name`可以包含一个句点,那么你将需要在路由上使用`:constraints => {:name => /.*/}`以防止Rails尝试将句点后的内容解释为格式. (2认同)