为什么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
语句返回类或对象?
答案 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 _”)