无论密码长度如何,密码长度验证始终会触发

时间:2014-07-15 17:16:57

标签: ruby-on-rails validation passwords

我尝试将密码长度验证添加到创建模型的表单中,即艺术家。表单有三个字段:名称,电子邮件和密码。没有密码确认字段。我在所有三个字段中添加了验证。当我填写错误的字段时,名称和电子邮件验证都会返回相应的错误,并且在正确填写字段时都不会出现错误。但是无论我为密码字段填写的密码长度如何,它总是会出现错误"密码太短。"

目前为止验证的代码

档案:Artist.rb

class Artist < ActiveRecord::Base
# attr_accessible :artist_name, :route_name

include UsersHelper

has_many :band_members
has_many :users, through: :band_members
has_many :events
has_many :performers
has_many :soundcloud_embeds
has_many :petitions

has_secure_password #validations: false

validate :should_not_have_profanities
validates :artist_name, presence: true
validates :email, presence: true, format: { with: VALID_EMAIL_REGEX }, uniqueness: {          case_sensitive: false }
validates :password, length: 6..50
before_create { generate_route_name if route_name.blank? }
before_save { |user| user.email = email.downcase }

到目前为止我尝试了什么:

切换:密码为:password_digest。这不起作用,因为它的密码摘要!=密码。

添加&#39; on:create&#39;验证:密码&#39;。这似乎对修复问题没有任何影响。

2 个答案:

答案 0 :(得分:0)

我认为它应该是in,而不是within ...

validates :password, length: { in: 6..50 }

见这里:http://guides.rubyonrails.org/active_record_validations.html#length

答案 1 :(得分:0)

我经常喜欢使用Regex进行字符验证。很难学习但很有帮助。对于字符串长度,您需要在文件中添加如下内容:

VALID_PASSWORD_REGEX = /[a-zA-Z0-9]{6,16}/

validates format: { with: VALID_PASSWORD_REGEX }