我在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
答案 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
希望这会有所帮助。