如何跳过依赖子摧毁Mongoid中的回调?

时间:2014-10-14 18:22:33

标签: ruby-on-rails activerecord mongoid activemodel

我有一个具有以下关联的用户模型:

has_many :brands, dependent: :destroy, inverse_of: :owner

但是有些用户有一个null master_id字段,我不想在他的品牌协会上调用destroy回调。有可能吗?

我试过了:

user.destroy
user.delete

但我无法跳过他的品牌协会的销毁回调。

2 个答案:

答案 0 :(得分:1)

您可以使用dependent: :destroy回调跳过before_destroy,如下所示:

# app/models/user.rb

has_many :brands, dependent: :destroy, inverse_of: :owner
before_destroy :prevent_destroy, prepend: true

private

def prevent_destroy
  return false if self.master_id.nil?
end

参见Cancelling callbacks的进一步参考。通过上述设置,如果用户的master_idnil,则before_destroy会返回false,这会阻止dependent: :destroy执行。

答案 1 :(得分:1)

只有对Mongoid 4有用的东西是:

counter