У меня есть обычная модель Rails со многими проверками. Модель имеет столбец skip_validations. Когда объект имеет skip_validations: true, я хочу иметь возможность обновлять объект без выполнения каких-либо проверок.
skip_validations
skip_validations: true
Есть ли способ сделать это без добавления опции unless для каждой проверки? - (например unless: Proc.new { |obj| obj.skip_validations == true })
unless
unless: Proc.new { |obj| obj.skip_validations == true }
Спасибо!
Вместо того, чтобы намеренно пропустить поле для пропуска проверок, вы можете передать validate: false методу save.
validate: false
save
Пожалуйста, посмотрите на this
PS: лучше не изобретать велосипед.
Вы можете сгруппировать все условные проверки вместе, как описано здесь https://edgeguides.rubyonrails.org/active_record_validations.html#grouping -условные проверки
class User < ApplicationRecord with_options unless: Proc.new { |obj| obj.skip_validations == true } do |obj| obj.validates :password, length: { minimum: 10 } ... end end
Другой возможный ответ (не рекомендуется) - переписать метод valid? внутри модели.
valid?
def valid?(*args) if self.skip_validations return true end super(args) end