Подтвердить что ты не робот

Rails 4 before_validation on:: create or on:: save

У меня есть случай, который распространяется вокруг моей головы.

У меня есть модель изображения, которую я только хочу сохранить, если она будет загружена. Мне также нужна информация, поступающая из загрузки для проверки изображения (например, высота и ширина). Но я хочу, чтобы только загрузка произошла, если кто-то пытается сохранить файл в первый раз.

Итак, я думал, что лучшим вариантом будет иметь before_validation, но я бы хотел, чтобы он запускался только при сохранении!

Мой код находится в этом стиле https://gist.github.com/andreorvalho/b21204977d2b70fdef83

Итак, странная часть этого on: :save и on: :create имеет действительно странное поведение или, по крайней мере, не то, что я ожидал.

Когда я ставлю его как on: :save Если я попытаюсь выполнить image.save в тесте, я вижу, что мои обратные вызовы before_validation не запускаются!

Если я помещаю on: :create в любую ситуацию, не имеет значения, если я запустил image.save, image.create или image.valid?

Итак, я предполагаю, что это либо не работает, либо я неправильно понимаю цель тех, кто находится в настройках.

p.s. моя проверка на создание, также происходит в каждой ситуации, сохраняет, создает или действует?

сообщите мне, если кто-то столкнулся с тем же или знает, почему не должно работать так.

4b9b3361

Ответ 1

Обратный вызов before_validation допускает ограничения для определенных событий в жизненном цикле объекта.

Вы можете использовать следующий синтаксис:

before_validation :set_uuid, on: :create
before_validation :upload_to_system, on: [:create, :update]

Вот документация по этому параметру для Rails 4.0, Rails 5.2 и Rails 6.0.