当前位置:  开发笔记 > 编程语言 > 正文

ActiveRecord getter中断验证

如何解决《ActiveRecordgetter中断验证》经验,为你挑选了0个好方法。

我需要验证信用卡号码.

model Billing
  validates :card, credit_card_number: true, allow_nil: true

验证宝石代码:

  def validate_each(record, attribute, value)
    record.errors.add(attribute, options[:message] || :invalid) unless credit_card_valid?(value, extract_brands(record, options))
  end

它工作正常.但后来我尝试用这种方式覆盖geter:

   def card
    "****#{self[:card][-4,4]}" if self[:card]
   end

验证失败.当我猴子修补validates_each像那样:

  def validate_each(record, attribute, value)
    value = record[attribute]
    record.errors.add(attribute, options[:message] || :invalid) unless credit_card_valid?(value, extract_brands(record, options))
  end

它恢复运作良好.验证getter而不是持久化值是否是正确的验证行为(validates_each第一个变体是遵循指南).或者什么是解决我的问题的优先方式?更新:Activemodel/Activerecord版本:4.2.3

推荐阅读
我我檬檬我我186
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有