Мне нужно подтвердить номер кредитной карты.Проверка доступа к валидации ActiveRecord
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
Он вернулся, чтобы работать хорошо. Правильное ли поведение проверки, чтобы проверять геттеры вместо постоянных значений (validates_each первый вариант следует руководству). Или какой способ решить мою проблему? Обновление: Activemodel/Activerecord версия: 4.2.3
Вы пытались определить свою собственную проверку? Определение чего-то типа класс CustomCreditCardValidator
Зачем вам удивляться, что '**************** 1234' недействителен номер кредитной карты? – mudasobwa