我在模型的顶部声明了attr_accessor:password
然后,我尝试做
validates :password, :presence => true, :length => { :minimum => 6 }, :if => (password.present? or hashed_password.blank?)
但它抛出异常并说ruby不知道密码字段
为什么?
编辑:
class User < ActiveRecord::Base
attr_accessor :password
attr_accessible :name, :email, :password
validates :name, :presence => true, :uniqueness => true
validates :email, :presence => true
validates :password, :presence => true, :length => { :minimum => 6 }, :if => (password.present? or hashed_password.blank?)
before_save :encrypt_password
def encrypt_password
if password.present?
self.salt = BCrypt::Engine.generate_salt
self.hashed_password = BCrypt::Engine.hash_secret(password, salt)
end
end
end
答案 0 :(得分:4)
与attr_accessible
无关 - 这里的问题是你在password
类方法的类上下文中调用validates
,因此它没有在那里定义。
您需要提供一个lambda,Rails将验证的实例传递给:
:if => lambda { |u| u.password.present? or u.hashed_password.blank? }