Вместо этого вы можете запустить его как before_save
.
После того, как он будет проверен, обновите миниатюру, затем сохраните ее, но просто используйте методы присвоения
before_save :save_thumbnail
def save_thumbnail
self.thumbnail_file_name = File.basename(thumb),
self.thumbnail_content_type = 'image/jpeg'
end
Так как это не вызовет save, вы не будете рекурсировать, но оно будет сразу же сохранено после выхода из метода.
Что-то подобное должно работать, если нет явной причины, по которой вам это нужно послеsave.
Поскольку вы обновляете не отдельный объект, а тот же, это также спасет вас от вызова базы данных.Вот как я делаю метки времени и тому подобное.