如何在不破坏记录的情况下删除记录?

时间:2011-07-24 16:11:16

标签: ruby-on-rails mongoid

我正在使用Mongoid,我有2个模型,Flow和Node,引用了父子关系。

class Node
  belongs_to :flow
end

class Flow
  has_many :nodes
end

当我想删除带有流的节点时,我这样做:

flow.nodes.clear

这会破坏关联的节点。如果我想在不破坏关联节点的情况下删除节点和流之间的关联,该怎么办?有没有办法做到这一点?

2 个答案:

答案 0 :(得分:3)

只要您没有设置flow.nodes.clear,就可以使用:dependent => :destroy。来自Rails Guide on Association Basics

  

4.3.1.7 collection.clear

     

collection.clear方法从集合中删除每个对象。   如果关联的对象与之关联,则会破坏它们   :dependent => :destroy,如果直接从数据库中删除它们   :dependent => :delete_all,以及以其他方式设置其外键   NULL

如果这不适合你,你可以尝试这个,它应该删除关联:

flow.nodes = nil

编辑1

如果没有,您将必须创建一种手动删除关联的方法。

   flow.nodes.update_all :flow_id => nil

答案 1 :(得分:1)

我不相信有任何内置方法,但你可以这样做:

Node.where(:flow_id => flow.id).update_all(:flow_id => nil)