【发布时间】:2013-04-24 15:30:50
【问题描述】:
我正在尝试创建一个 rails 3.2.13 应用程序,在该应用程序中创建用户时会自动为该用户生成密码。现在我正在使用 before_validate 生成密码并将其分配给用户对象上的密码和密码确认字段,然后再创建,但设计仍然抱怨密码仍然为空。
设计接受我为用户对象生成的密码的最佳方法是什么?如果可能的话,如果能够做到这一点而不必覆盖内部验证,那就太好了。
【问题讨论】:
我正在尝试创建一个 rails 3.2.13 应用程序,在该应用程序中创建用户时会自动为该用户生成密码。现在我正在使用 before_validate 生成密码并将其分配给用户对象上的密码和密码确认字段,然后再创建,但设计仍然抱怨密码仍然为空。
设计接受我为用户对象生成的密码的最佳方法是什么?如果可能的话,如果能够做到这一点而不必覆盖内部验证,那就太好了。
【问题讨论】:
我不知道你做错了什么...在这里快速尝试,结果一切正常。
这是我的模型
class User < ActiveRecord::Base
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
attr_accessible :email, :password, :password_confirmation, :remember_me
before_validation :set_user_password
def set_user_password
@password = Devise.friendly_token
end
end
我什至不必设置 password_confirmation 只是密码,它在 Rails 控制台上保存而没有错误。
【讨论】:
以前的解决方案很棒。但是您不能重设密码。 set_user_password 应该只在创建帐户时执行。
before_validation :set_user_password, :on => :create
def set_user_password
@password = Devise.friendly_token
end
【讨论】: