如果数据库记录未通过唯一性验证,如何销毁数据库记录?

时间:2018-04-30 20:19:04

标签: ruby-on-rails ruby-on-rails-5

如果在更新其属性时未通过唯一性验证,我希望能够销毁数据库记录。例如,如果我尝试将记录的字段更新为具有唯一性验证且已存在于数据库中另一条记录中的另一个值,则应销毁正在更新的原始对象。

我尝试使用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 :(得分:0)

也许你可以在控制器层

中做到这一点

example_controller.rb

def update
  if @question.update(params.require(:question).permit(:name))
     ...
  else
    @question.destroy if @question.errors.added?(:name, : uniqueness)
  end
end

答案 1 :(得分:-1)

尝试在调用destroy之前检查delete方法中有多少问题:

def delete
  if Question.where(name: self.name).count > 1
    self.destroy
  end
end