设计。根据他的电子邮件自动创建用户名

时间:2012-05-06 21:13:59

标签: ruby-on-rails ruby-on-rails-3 devise

是否可以使用设计自动根据自己的电子邮件创建用户名?

在注册页面上,我只有电子邮件和密码字段。

例如,当用户使用电子邮件randomname@gmail.com创建新帐户时, 我希望他的用户名自动成为randomname。我怎么能完成它?

2 个答案:

答案 0 :(得分:5)

您可以使用^[^@]+这样的正则表达式获取电子邮件地址的第一部分,这将返回@符号前字符串开头的所有内容。

^ /* start of string or line */
[^@] /* character class capturing everything except @ */
+ /* match must happen atleast one time */

要将用户名添加到数据库,可以使用callback

class User < ActiveRecord::Base
  before_create :set_username

  private
    def set_username
      self.username = self.email[/^[^@]+/]
    end
end

答案 1 :(得分:0)

要考虑具有相同名称但不同网址的电子邮件,您可以在最后添加随机数。

self.username = "#{self.email[/^[^@]+/]}-#{SecureRandom.hex(1)}"

这会将hoobas-1f hoobas-3c返回到上述评论中的两封电子邮件。