我有一个模型User,其中包含常用属性email,email_confirmation,password,password_confirmation。我使用“has_secure_password”,因此数据库中的真实属性是email和password_digest。但是我想将密码长度限制为6个字符。
这是我的模特:
class User < ActiveRecord::Base
before_validation :auto_strip_confirmation
validates :email, presence: true,
length: { maximum: MAX_SIZE_DEFAULT_INPUT_TEXT },
format: { with: VALID_EMAIL_REGEX },
uniqueness: { case_sensitive: false },
confirmation: true
validates :email_confirmation, presence: true
has_secure_password
validates :password, length: { minimum: MIN_SIZE_USER_PASSWORD,
maximum: MAX_SIZE_USER_PASSWORD }
private
def auto_strip_confirmation
self.password.strip!
self.password_confirmation.strip!
end
end
但是我在控制台中得到了这个:
> user.password = user.password_confirmation = "a "
=> "a "
> user.valid?
User Exists (0.8ms) SELECT 1 AS one FROM "users" WHERE LOWER("users"."email") = LOWER('user@example.com') LIMIT 1
=> true
感谢您的帮助。
答案 0 :(得分:0)
重新加载后,我的代码实际上在console:user.valid? =&GT;假(谢谢surendran)。但我最初的问题是在我的测试中:我认为我无法设置虚拟属性,因为错误消息“未定义的方法`条带!”为零:NilClass“。但我忘了我测试我的用户是否有效,当密码为零时,几乎像这样:
before { user.password = nil) }
it { should_not be_valid }
before_validation在此测试之前到来,因此他尝试剥离一个nil对象。