破坏之后没有召唤协会破坏?

时间:2016-04-05 19:58:21

标签: ruby-on-rails ruby ruby-on-rails-4

我有以下型号设置。

class Space
  has_many :locations, through: :location_spaces
  has_many :location_spaces, dependent: :destroy, inverse_of: :space
end

class Location
  has_many :spaces, through: :location_spaces
  has_many :location_spaces, dependent: :destroy, inverse_of: :location
end

class LocationSpace
  belongs_to :location,     inverse_of: :location_spaces
  belongs_to :space,        inverse_of: :location_spaces
end

如果我通过修改Space模型上的location_ids来创建SpaceLocation,这也会触发SpaceLocation的AFTER_CREATE回调。

但是,更新空间模型并将location_ids设置为[]时,将删除SpaceLocation。但是不会调用after_destroy回调。看一下sql,就会破坏它。

为什么没有调用after_destroy回调? 我已经尝试过每次“后”回调,包括after_touched,没有任何东西被调用。

1 个答案:

答案 0 :(得分:0)

来自docs for has_many

  

还有clear方法与delete_all相同,只是它返回关联而不是已删除的记录。

来自docs for delete_all

  

删除匹配conditions的记录,而不首先实例化记录,因此不调用destroy方法也不调用回调。