Как уничтожить запись в базе данных, если она не прошла проверку уникальности? - PullRequest
0 голосов
/ 30 апреля 2018

Я хочу иметь возможность уничтожить запись базы данных, если она не проходит проверку уникальности при обновлении ее атрибутов. Например, если я пытаюсь обновить поле записи на другое значение, которое имеет проверку уникальности и уже существует в другой записи в базе данных, исходный объект, который обновляется, должен быть уничтожен.

Я пытался использовать обратный вызов after_validation для вызова функции, которая уничтожает объект, однако ActiveRecord продолжает откат и возвращает false, и я не знаю почему. Я думаю, что это может быть связано с проверкой уникальности, однако я не уверен.

Я использую Rails 5 и ActiveRecord для взаимодействия с базой данных.

Ниже приведен пример:

class Question
 validates :name, presence: true, uniqueness: true

 after_validation :destroy

 def destroy
  if self.errors.any?
   self.destroy
  end
 end

Проверка выполняется только в одном поле объекта

Ответы [ 2 ]

0 голосов
/ 04 мая 2018

Может быть, вы можете сделать это в слое контроллера

example_controller.rb

def update
  if @question.update(params.require(:question).permit(:name))
     ...
  else
    @question.destroy if @question.errors.added?(:name, : uniqueness)
  end
end
0 голосов
/ 01 мая 2018

Попробуйте проверить, сколько вопросов в методе delete перед вызовом destroy:

def delete
  if Question.where(name: self.name).count > 1
    self.destroy
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...