【问题标题】:Delete in one-to-many hierarchical relationships not symmetric?在非对称的一对多层次关系中删除?
【发布时间】:2012-09-07 23:53:59
【问题描述】:

我正在尝试构建一个简单的层次结构。

class Category < ActiveRecord::Base
  attr_accessible :name

  belongs_to :parent, class_name: "Category"
  has_many :children, class_name: "Category", foreign_key: :parent_id
end

我可以将类别添加到树中,并且效果很好。但是,删除时事情并没有按预期工作。例如:

root = Category.new(:name => "Root")
child = Category.new(:name => "Child")
child.parent = root
# things are fine to this point. root.children contains child,
# and child.parent is root

root.children.delete child
# at this point root.children is empty, but child.parent is still root

有什么想法可能在这里发生吗?谢谢!

【问题讨论】:

  • 我希望是这样,尤其是在软删除的情况下。
  • 您好托尼:感谢您的帮助。有什么办法可以让这样的删除影响 child.parent 你能想到的吗?
  • 我认为你必须添加一些东西,或者在你发布自己时重新加载是有道理的。就我个人而言,我担心我正在利用一个孤儿。这就像 Update Orders Set CustomerID = null where CustomerID = 456,我自己从来没有对这种事情感到满意。

标签: ruby-on-rails ruby-on-rails-3


【解决方案1】:

您可以将:dependent =&gt; :destroy 添加到has_many 关系中,这将在父级销毁时删除父级的子级。如果只有一个子对象被销毁,您可能不想销毁父对象,对吧?

【讨论】:

  • 我实际上不想删除父母或孩子;我想要的是删除关系本身。从数据库的角度来看,这将使 child 的 parent_id 列的值为零。有意义吗?
【解决方案2】:

答案:它是 product.reload

这是我在数小时搜索后找到的第一个解释: https://stackoverflow.com/a/7449957/456280

(这也与我的问题直接相关:Delete in Many to Many Relationship Not Symmetric?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-12
    • 1970-01-01
    • 2021-02-04
    • 1970-01-01
    相关资源
    最近更新 更多