Когда возникает ошибка обработки файла before_save, после проверки я должен вызвать исключение или вернуть false и добавить ошибку? - PullRequest
4 голосов
/ 01 февраля 2012

Если у меня есть, например, изображение, которое проходит все проверки, например, размер, размеры, тип и т. Д., Но когда мне приходится обрабатывать его, по неизвестной причине ImageMagick все равно выдает ошибку ... как следуетЯ справлюсь с этим?

1 Ответ

13 голосов
/ 01 февраля 2012

Из Руководства по валидации и обратным вызовам активной записи :

Если какой-либо метод обратного вызова до возвращает точно false или вызывает исключение, цепочка выполнения останавливается и выдается ROLLBACK [...]

Таким образом, вы можете либо позволить пузырю исключения попасть в ActiveRecord, либо вы можете перехватить его самостоятельно, перевести его во что-то, что имеет смысл в контексте вашего приложения, и вернуть false. Вы можете регистрировать ошибки внутри обратного вызова before_save, поэтому может иметь смысл нечто подобное:

before_save :do_magick_things

private

def do_magick_things
    # ImageMagick stuff...
    true
rescue ImageMagickError, FatalImageMagickError => e
    errors.add(:base, 'Some sort of sensible version of e.message')
    false
end

Если вы можете перевести ошибки ImageMagick во что-то, что имеет смысл для конечного пользователя, тогда ловушка и преобразование исключения ImageMagick (как в do_magick_things), вероятно, будет иметь смысл; преобразование исключения в сообщение об ошибке также позволяет вызывающей стороне использовать save!, если они хотят исключения, или save, если они этого не делают.

...