【问题标题】:After destroy not being called on association destruction? [duplicate]销毁后不调用关联销毁? [复制]
【发布时间】:2016-04-05 19:58:21
【问题描述】:

我有以下模型设置。

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,但没有调用任何内容。

【问题讨论】:

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


【解决方案1】:

来自docs for has_many

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

来自docs for delete_all

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-01
    • 2012-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多