1

У меня есть обратный вызов before_validation, который переформатирует одну из записей. Мне нужно, чтобы он выполнялся до проверки, чтобы убедиться, что отформатированный результат был правильно проанализирован. Но насколько я понимаю каждый раз, когда я вызываю valid?, чтобы проверить, все ли данные в порядке, запись будет переформатирована. Могу ли я сделать это по-другому, потому что на valid? я просто хочу проверить, действительно ли все поля и что-то не меняют.Добавить формирование перед сохранением и валидацией без обременения "validate?"

ответ

2

это выглядит очень похоже на это: Rails model validation on create and update only

Вы можете сделать

before_validation(:on => :create) do 
    reformat #method call, not a symbol 
end 
before_validation(:on => :update) do 
    reformat #method call, not a symbol 
end 

, но он по-прежнему работает для меня, когда я звоню valid?. Не знаю, почему, хотя, потому что это не в контексте создания или обновления, поэтому я чувствую, что Rails лежит на нас в этом случае.

Если вы могли бы сделать это в before_save, тогда он должен работать, так как он запускается после проверки. Вы сказали, что нужно проверить, что это все-таки хорошо, когда вы переформатировать, так что, возможно добавить новый метод для проверки переформатирования, и сделать

before_save :reformat, :validate_reformatting 

или добавить проверку вменяемости в конце вашего метода, который используется для переформатирования ,

+0

Это не сработает :(В первую очередь ': on => [: create,: update]' дает ошибку: 'неожиданный '[', ожидающий tSTRING_CONTENT или tSTRING_DBEG или tSTRING_DVAR или tSTRING_END ... (self.validation_context ==: [: create,: update]), а затем добавляю ': on =>: save' метод обратного вызова не вызывается на' .save' – Uko

+0

Простите, я не читал другая тема, о которой я упомянул достаточно подробно, и на самом деле сказал: ': on => [: create,: update]' не работает, а ': on =>: save' тоже не работает для меня. обновите с правильным синтаксисом, чтобы сделать это, но он все еще работает на 'valid?' для меня. – keithepley

Смежные вопросы