@gamer25
Студент 3 курса ЯрГУ факультета ИВТ

Как отменить сохранение объекта в Rails?

Здравствуйте!

Есть такая ситуация:
class CheckerResult < ApplicationRecord
  has_many :checker_errors, dependent: :destroy
  ###
end
class CheckerError < ApplicationRecord
  belongs_to :checker_result
  ###
end

checker_result = CheckerResult.new(...)

# Создается несколько таких checker_error
checker_result.checker_errors.new(...)
checker_result.checker_errors.new(...)

checker_result.save


Необходимо, чтобы checker_error имел какой-то метод, который проверяет значение поля, и в зависимости от его значения мог удалить себя (отменить создание), как-бы игнорировать создание.
Схематично:
class CheckerError < ApplicationRecord
  belongs_to :checker_result
  ###
  def delete_if_some
    отменить_создание_себя if условие
  end
end


Пробовал такие варианты:
before_create do
  throw(:abort) if условие
end

before_create do
  destroy if условие
end

но они не подходят.

Наверно, не очень понятно объяснил. Заранее спасибо!
  • Вопрос задан
  • 122 просмотра
Пригласить эксперта
Ответы на вопрос 1
Оборачиваем код в транзакцию, чтобы иметь возможность отменить изменения.

ActiveRecord::Base.transaction do
  checker_result.save
end


В нужном месте вызываем ActiveRecord::Rollback и транзакция отменяется.

class CheckerError < ApplicationRecord
  belongs_to :checker_result

  def delete_if_some
    raise ActiveRecord::Rollback 
  end
end
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы