如何在ActiveModel :: EachValidator中创建一个数组

时间:2015-09-13 22:09:55

标签: ruby-on-rails-4

我是Ruby-on-Rails的新手4.我创建了一个自定义验证器,但无法为数组赋值。它显示错误 未定义的方法<<' for nil:NilClass。 它突出显示@msg << 1

例如,我的模型就像

class User < ActiveRecord::Base

    has_secure_password
    validates :email,:email_format => true, :on => :create
    validates :password, password_format:{with: "upercase"}
end

我的自定义验证器

class PasswordFormatValidator < ActiveModel::EachValidator

  #def initilize(options)-Fixed
  def initialize(options)
  @msg=[]
  @password1 = options[:attributes=>[:password]]
  @val=options.inspect
  super
  end

  def validate_each(record, attribute, value)
   record.errors[attribute] << @val

    unless (value.nil? || value.empty?)
    @msg << 1
    #record.errors[attribute] << "testing"

    end

 end

end

@val输出

{:attributes=>[:password], :complexity=>3, :length=>6, :class=>User(id: integer, email: string, password_digest: string, created_at: datetime, updated_at: datetime)}

1 个答案:

答案 0 :(得分:0)

您的构造函数名称中有拼写错误,它应该是initialize而不是initilize。这就是你的@msg变量未定义的原因 - 你的构造函数从未被调用过!

度过愉快的一天。