Преобразование данных после успешной проверки - PullRequest
1 голос
/ 05 декабря 2010

У меня возникла небольшая проблема с нормализацией строкового кода UPC, чтобы я мог сохранить его в том же формате в базе данных.

Я использую гем ean для проверки правильности строки (которая работает нормально), но если я выброшу какой-нибудь код назначения после его проверки, например:

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 

Стрип-вызов является просто примером, поскольку это строка. Я на самом деле буду удалять тире в UPC.

Приведенный выше код не работает так хорошо, как на самом деле не сохраняет его. Я посмотрел на запуск метода, как

after_validation :normalize_upc

def normalize_upc
    upc = upc.strip
end

.. но и выше не работает.

Что вы, ребята, делаете для проверки и преобразования данных после проверки?

Ответы [ 2 ]

1 голос
/ 05 декабря 2010

Я бы сделал свой валидатор строгим, а затем использовал бы фильтр before_validation для выполнения любых необходимых преобразований.

1 голос
/ 05 декабря 2010

Я бы порекомендовал переопределить метод setter в вашей модели для 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...