Как пропустить все проверки в Rails? - PullRequest
1 голос
/ 08 января 2020

У меня есть обычная модель Rails со многими проверками. Модель имеет столбец skip_validations. Когда объект имеет skip_validations: true, я хочу иметь возможность обновлять объект без выполнения каких-либо проверок.

Есть ли способ сделать это без добавления опции unless для каждой проверки? - (например unless: Proc.new { |obj| obj.skip_validations == true })

Спасибо!

Ответы [ 3 ]

2 голосов
/ 08 января 2020

Вместо того, чтобы намеренно пропустить поле для пропуска проверок, вы можете передать validate: false методу save.

Пожалуйста, посмотрите на this

PS: лучше не изобретать велосипед.

1 голос
/ 08 января 2020

Вы можете сгруппировать все условные проверки вместе, как описано здесь 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
0 голосов
/ 08 января 2020

Другой возможный ответ (не рекомендуется) - переписать метод valid? внутри модели.

def valid?(*args)
  if self.skip_validations
    return true
  end
  super(args)
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...