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. моя проверка на создание, также происходит в каждой ситуации, сохраняет, создает или действует?
сообщите мне, если кто-то столкнулся с тем же или знает, почему не должно работать так.
Ответы
Ответ 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.