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