У меня есть две модели, которые при сохранении определенных типов данных вызывают исключение базы данных.Я могу преобразовать данные перед сохранением, чтобы избежать исключения, но преобразование стоит дорого, а исключение происходит очень редко.
Итак, мне было интересно, возможно ли создать переопределение метода model.save, ипоймать исключение, которое выдается из базы данных?Будет ли это работать?
Например:
def save
begin
super
rescue Exception => e
if e.is_a? ActiveRecord::StatementInvalid
# Do some processing and resave
end
end
end
Причина, по которой я хотел бы сделать это, заключается в том, что мне уже пришлось повторять большой кусок кода обработки между двумямодели, которые имеют эту проблему, а также потому, что я хотел бы избежать потенциальной проблемы вызова сохранения в другом месте позже, но не добавляя код обработки исключений.
Например, при написании некоторого тестового кода и вызове сохранениянапрямую, данные об ошибках вывели исключение.
Итак, несколько вопросов:
- Возможно ли даже перехватить исключение из сохранения или сохранения!метод?
- Как исправить данные, как мне попытаться снова сохранить?Я просто снова вызываю super ()?
- Есть ли лучший способ справиться с этим?
Большое спасибо.