gpt4 book ai didi

ruby-on-rails - ActiveRecord getter 中断验证

转载 作者:数据小太阳 更新时间:2023-10-29 07:19:01 24 4
gpt4 key购买 nike

我需要验证信用卡号。

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

验证 gem 代码:

  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

最佳答案

首先,您定义的方法不是模型问题 - 它是 View 问题,因此应移至助手或演示者。然而,在模型中使用此类方法是非常常见的做法,因此我不会说这是一个大问题。

通过为您的方法选择其他名称,您可以轻松解决整个问题:

def starred_card
card && "****#{card[-4,4]}"
end

关于ruby-on-rails - ActiveRecord getter 中断验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34333814/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com