我正在使用Mongoid,我有2个模型,Flow和Node,引用了父子关系。
class Node
belongs_to :flow
end
class Flow
has_many :nodes
end
当我想删除带有流的节点时,我这样做:
flow.nodes.clear
这会破坏关联的节点。如果我想在不破坏关联节点的情况下删除节点和流之间的关联,该怎么办?有没有办法做到这一点?
答案 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
如果没有,您将必须创建一种手动删除关联的方法。
flow.nodes.update_all :flow_id => nil
答案 1 :(得分:1)
我不相信有任何内置方法,但你可以这样做:
Node.where(:flow_id => flow.id).update_all(:flow_id => nil)