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

时间:2018-03-03 11:06:47

标签: ruby-on-rails ruby devise ruby-on-rails-5 activeadmin

现在我的rails应用程序(使用设计和活动管理员),我将用户ID作为序列号,具体取决于用户ID创建的序列,即第一次获得用户ID 1,然后再次注册不同的详细信息然后获得用户ID 2然后3,依此类推。 但是我希望有自定义用户ID,例如greg51或michel7as或类似用户注册页面中提到的用户ID 我该怎么做?

3 个答案:

答案 0 :(得分: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 :(得分:1)

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

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

添加"用户名"在Devise中你需要:

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

请参阅:

答案 2 :(得分:-1)

向您的用户模型添加字段:

rails g migraton AddUsernamaToUser username:string 

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

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

您将能够要求用户名。