Преобразование данных после успешной проверки
-
08-10-2019 - |
Вопрос
У меня немного проблемы нормализуя строковый код UPC, чтобы я мог хранить его в том же формате в базе данных.
Я использую ean
GEM, чтобы проверить, хорошая ли строка (которая работает нормально), но если я брошу несколько кода назначения после того, как он проверяет, например:
validate :upc_check
def upc_check
if !upc.nil?
if !upc.ean?
errors.add(:upc, 'is not a valid UPC.')
else
upc = upc.strip
end
end
end
Половок накладки - это просто пример, что это строка. Я действительно буду удалить тире в УПЦ.
Приведенный выше код не работает так хорошо, как на самом деле не сохраняет его. Я посмотрел на срабатывание метода, как
after_validation :normalize_upc
def normalize_upc
upc = upc.strip
end
.. но выше выше не работает.
Что вы, ребята, делаете, чтобы проверить и преобразовывать данные после проверки?
Решение
Я бы сделал свой валидатор строгим, а затем использовать фильтр Free_Validation, чтобы выполнить любые необходимые преобразования.
Другие советы
Я бы порекомендовал переопределить метод сеттера в вашей модели для UPC и не имея отдельного метода для нормализации его. Это будет достигнуто с чем-то вроде:
def upc=(value)
self.upc = value.strip
end
Редактировать:
Я также бы убрал свой метод валидации, чтобы удалить эту функциональность, так как:
validate :upc_check, :unless => lambda {|m| m.upc.nil?}
def upc_check
errors.add(:upc, 'is not valid') unless upc.ean?
end