我无法访问'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”,而不是其中的值。请帮忙!
答案 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
传递要评估的字段名称的位置。