我有一个名为Person的模型。
class Person < ActiveRecord::Base
validate_presence_of :name
validate :check_card_number
def check_card_number
errors.add(:card_number, "Card Number can't be blank") if card_number.blank?
-----
# some other stuffs here
----
end
end
如果我调用以下方法,我将获得验证器类名称
Person.validators_on(:name) => [ActiveModel::Validations::PresenceValidator]
但是
Person.validators_on(:card_number) => []
如何检查我是否正在验证卡号的存在?
答案 0 :(得分:1)
validate
方法实际上将一个方法(作为参数传递)插入callback chain。因为,它不会使用ActiveModel
中的任何defined validators。因此,它可以这样访问:
Person.send(:get_callbacks, :validate).detect{ |cb| cb.filter == :check_card_number }
然而,方法中的条件&#34; card_number.blank?
&#34;从card_number
属性的存在看起来。在我的猜测中哪个适合:
validate_presence_of :name, :card_number
答案 1 :(得分:0)
试试这个: -
ModelName._validate_callbacks.to_a.reject { |validation| validation.filter.to_s.starts_with?('validate_associated_records') }
这里&#39;拒绝&#39;用于忽略某些默认验证。
答案 2 :(得分:-1)
我怀疑这是可能的。刚试过Person.validators
但它没有返回自定义验证方法。
如果您真的希望validators_on
和validators
返回所有验证器,您可以create a custom ActiveModel::Validator
分类并使用validates_with
在模型中注册。