【问题标题】:dependent => destroy on a "has_many through" association依赖 => 销毁“has_many through”关联
【发布时间】:2010-11-26 19:55:17
【问题描述】:

显然依赖 => 当同时使用 :through 选项时会忽略destroy。

所以我有这个...

class Comment < ActiveRecord::Base
  has_many :comment_users, :dependent => :destroy
  has_many :users, :through => :comment_users
  ...
end

...但删除评论不会导致关联的 comment_user 记录被删除。

那么,对于使用 :through 时的级联删除,推荐的方法是什么?

谢谢

【问题讨论】:

    标签: ruby-on-rails activerecord has-many-through


    【解决方案1】:

    显然 :dependent 没有被忽略!

    真正的问题是我调用Comment.delete(id) 直接进入数据库,而我现在使用Comment.destroy(id) 加载Comment 对象并在其上调用destroy()。这会接收到:dependent =&gt; :destroy,一切都很好。

    【讨论】:

    • 确实!我遇到了类似的问题,除了我在使用dependent: :destroy 时遇到外键错误。问题是我使用的是obj.delete 而不是obj.destroy,所以家属没有被删除,因此完整性错误。
    【解决方案2】:

    原始海报的解决方案是有效的,但是我想指出,这仅在您有该表的 id 列时才有效。我更喜欢我的多对多表只是两个外键,但我必须从迁移表定义中删除我的“id:false”,以便级联删除工作。拥有这个功能肯定比没有 id 列更重要。

    【讨论】:

    • 谢谢!我只是花了半天时间试图自己解决这个问题。
    【解决方案3】:

    如果你有一个多态关联,你应该按照@blogofsongs 所说的那样做,但要像这样使用 foreign_key 属性:

    class User < ActiveRecord::Base
      has_many :activities , dependent: :destroy, foreign_key: :trackable_id
    end
    

    【讨论】:

      猜你喜欢
      • 2015-06-01
      • 2010-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多