为Devise用户创建随机用户名

时间:2014-11-29 01:35:15

标签: ruby-on-rails devise

我在rails 4应用程序中使用Devise。

用户拥有注册时不需要的用户名,但我想随机为他们分配一个。

我已经制作了以下控制器,并确保:用户名在强参数中。

未保存用户名。你能帮我理解为什么吗?

class UsersController < DeviseController
  before_create :set_username

  private
    def set_username
      o = [1..9].map { |i| i.to_a }.flatten
      self.username = "user" + (0...10).map { o[rand(o.length)] }.join
    end
end

1 个答案:

答案 0 :(得分:2)

您在控制器中使用self。在控制器内部,self指的是控制器本身。因此,当您说self.username时,它指的是控制器上的变量用户名,而不是模型上的变量用户名。

此外,您应该使用SecureRandom来生成真正独特的ID。

编辑:将代码移动到用户模型。

编辑2:使用after_create

尝试将代码更改为

class User
  #use after create for setting the username
  after_create :set_username

  private
    def set_username
       self.username = "user-#{ SecureRandom.hex(10)}"
    end
end

希望这会有所帮助。