Вопрос

У меня немного проблемы нормализуя строковый код 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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top