如何在rails应用程序中编辑用户标识

问题描述 投票:1回答:3

现在我的rails应用程序(使用设计和活动管理员),我有用户ID作为序列号取决于用户ID创建的序列,即第一次我得到用户ID 1,然后再次注册不同的细节然后得到用户ID 2然后3等等。但我希望有自定义用户ID,如greg51或michel7as或类似用户注册页面中询问的内容我该怎么做?

ruby-on-rails ruby devise ruby-on-rails-5 activeadmin
3个回答
2
投票

如果您想使用用户名或电子邮件登录,请按照以下网站中的设计说明进行操作:https://github.com/plataformatec/devise/wiki/How-To:-Allow-users-to-sign-in-using-their-username-or-email-address

如果要查找使用其他字段的用户,可以使用@user.find_by(username: params[:username])或控制器中的任何字段。

但是,您不应该为新字段(用户名,电子邮件或其他)更改id。 Rails在它创建的所有表中生成id,并使用id作为主键。永远不应更改主键,因为它将在其他表中用作引用。为此,它使用数据库中的序列字段,它创建唯一的整数值(它递增最后的序列值并将其作为新的id返回)并保证多个事务不能获得相同的值(因此没有其他记录将具有相同的id)。

除了主键之外,您还可以定义许多其他唯一字段,例如用户名,电子邮件,document_id等。虽然这些字段也可以是唯一的(并且可以使用数据库约束和rails中的validates uniqueness强制为唯一字段,但它们是不用作主键(因此您可以稍后更改它们,不会影响任何引用)。


1
投票

您想要的是虚荣URL,您可以让用户在URL中提供更人性化的标识符。使用的列通常称为段塞列。

这不是主键ID的替代,无论是以自动递增整数列的形式还是UUID,它基本上是相同的,但它使用随机生成的字符串来代替解决与可伸缩性相关的问题。主键是数据库表彼此引用的方式。用用户生成的值替换它是可能的,但根本不是一个好主意。

要在Devise中添加“用户名”功能,您需要:

  • 添加带有迁移的用户名列。确保它具有唯一约束。
  • 验证并确保用户名是URL安全且唯一的。
  • 改变Warden从数据库中查找用户以使用idusername列的方式。
  • 更改设计在其控制器中查找用户的方式,以使用idusername列。

看到:


-1
投票

在用户模型中添加一个字段:

rails g migraton AddUsernamaToUser username:string 

然后在您的设计表单中添加一个字段:

https://github.com/plataformatec/devise/issues/4201

而且你将能够要求用户名。

© www.soinside.com 2019 - 2024. All rights reserved.