Я хотел бы добавить некоторую логику в мою модель, чтобы обеспечить последовательное строковое представление серийного номера в базе данных устройств.Ниже приведен пример того, о чем я думаю: вызвать пользовательскую проверку и выполнить форматирование данных в объекте, прежде чем сохранить их в базе данных.
class Device < ActiveRecord::Base
validates_presence_of :serialNumber
validate :validate_sn
def validate_sn
if !serialNumber.nil? && serialNumber !~ /-/
serialNumber = serialNumber.scan(/.{4}/).join('-')
end
end
end
У меня две проблемыс этим кодом.Во-первых, он выдаст ошибку «1004 *
NoMethodError: undefined method `scan' for nil:NilClass
» в строке 6, что сбивает меня с толку.Я могу обойти это, изменив эту строку на:
sn = serialNumber; serialNumber = sn.scan(/.{4}/).join('-')
Но если бы кто-то мог объяснить, почему это работает, но первое, я бы не оценил.Настоящая проблема заключается в том, что данные сохраняются без тире (после того, как это исправление применяется выше).Я забыл или неправильно понял что-то фундаментальное здесь?У кого-нибудь есть лучшее решение для этого?
Спасибо,