Rails 5:防止回调中的删除

时间:2017-08-10 16:53:05

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

为什么Rails 5中的这个回调不会停止删除:

before_destroy :document_check

def document_check
  if documents.present?
    errors.add(:article, 'in use cannot be deleted')
    throw :abort
  end
end

This post解释了Rails 4和5之间的区别,因此如果模型有任何documents,我的回调应该会阻止删除,但我的记录仍然被删除。我的删除测试因此错误而失败:

TypeError:
    exception class/object expected

如何使用throw :abort语句返回类或对象?

1 个答案:

答案 0 :(得分:1)

这是一个简单的限制选项,在声明关系时给出:

class SomeModel < ActiveRecord::Base
  # Rails 4+
  has_many :documents, dependent: :restrict_with_exception
  # Rails 3
  has_many :documents, dependent: :restrict

在文档中查看dependent所有可能选项的详细信息:http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html#method-i-has_many(ctrl + f“:restrict_with _”)