validates_with的选项

时间:2012-08-01 03:17:40

标签: ruby-on-rails-3 custom-validators

我无法访问'validates_with'

中作为选项传递的值

我的模特:

    class Person < ActiveRecord::Base
    include ActiveModel::Validations
    attr_accessible :name, :uid

    validates :name, :presence => "true"
    validates :uid, :presence => "true"
    validates_with IdValidator, :attr => :uid

我的自定义验证器:

    Class IdValidator < ActiveModel::Validator

    def validate(record)
    puts options[:attr]
    ...
    ...
    end
    end

出于测试目的,我打印“options [:attr]”,我看到的只是终端中的“:uid”,而不是其中的值。请帮忙!

1 个答案:

答案 0 :(得分:2)

当你传递:attr => :uid时,你只是传递一个符号。这里没有任何神奇的事情 - 它只需要你附加的选项的哈希并将其作为options哈希传递。所以当你写它时,你会看到你传递的符号。

你可能想要的是

Class IdValidator < ActiveModel::Validator
  def validate(record)
    puts record.uid
    ...
    ...
  end
end

由于validates_with是一种类方法,因此无法在选项哈希中获取单个记录的值。如果您对更干的版本感兴趣,可以尝试以下方法:

class IdValidator < ActiveModel::Validator
    def validate(record)
      puts record[options[:field]]
    end
end


class Person < ActiveRecord::Base
  include ActiveModel::Validations
  attr_accessible :name, :uid

  validates :name, :presence => "true"
  validates :uid, :presence => "true"
  validates_with IdValidator, :field => :uid
end

传递要评估的字段名称的位置。