【问题标题】:如何判断关系是否刚刚被删除?
【发布时间】:2022-01-23 10:53:39
【问题描述】:

有没有像#saved_changes 这样的东西会告诉我关系何时被破坏?破坏发生在accepts_nested_attributes_for

我有一个处理管道,我的对象在保存后会经过该管道,并且该管道需要知道关系是否被破坏。不幸的是,当我在销毁图像后调用my_obj.images 时,#image 是一个空数组。

我还没有找到“破坏前的图像”方法。我怀疑在提交更改之前我必须查看该对象并在其上设置一个标志,表明某些东西正在被破坏。如果可能的话,我真的很想避免这种情况。

【问题讨论】:

  • 在图像模型中为什么不使用after_destroy 回调并将删除的条目推送到单独的表中,比如deleted_entity。另一种方法是在删除时进行软删除,即将条目标记为已删除。

标签: ruby-on-rails


【解决方案1】:

我不止一次需要这个,所以我为它写了一个 gem:

https://github.com/brandoncc/activerecord-nested_attribute_destruction

这是一个用法示例:

class Harbor
  has_many :ships

  accepts_nested_attributes_for :ships, allow_destroy: true
end

harbor.ships_attributes = [harbor.ships.first.attributes.merge('_destroy': true)]
harbor.save!

harbor.ships_destroyed_during_save? # true

看到最后一行代码了吗?这就是宝石添加的内容:笑脸:

【讨论】:

    猜你喜欢
    • 2017-05-09
    • 2019-12-25
    • 1970-01-01
    • 2021-01-12
    • 1970-01-01
    • 1970-01-01
    • 2011-05-19
    • 2016-02-25
    • 1970-01-01
    相关资源
    最近更新 更多