picardo
picardo

Reputation: 24886

How to remove a record without destroying it?

I am using Mongoid and I have 2 models, Flow and Node with a referenced parent-child relationship.

class Node
  belongs_to :flow
end

class Flow
  has_many :nodes
end

When I want to remove a node with a flow I do this:

flow.nodes.clear

This destroy the associated nodes. What if I want to remove the association between the node and the flow without destroying the associated nodes? Is there a way of doing that?

Upvotes: 1

Views: 517

Answers (2)

Matthew Lehner
Matthew Lehner

Reputation: 4027

You should be able to use flow.nodes.clear as long as you don't have :dependent => :destroy set. From the Rails Guide on Association Basics:

4.3.1.7 collection.clear

The collection.clear method removes every object from the collection. This destroys the associated objects if they are associated with :dependent => :destroy, deletes them directly from the database if :dependent => :delete_all, and otherwise sets their foreign keys to NULL.

If this isn't working for you, you could try this and it should remove the association:

flow.nodes = nil

EDIT 1

If not, you'll have to create a method to remove the association manually.

   flow.nodes.update_all :flow_id => nil

Upvotes: 3

Dogbert
Dogbert

Reputation: 222158

I don't believe there's any in built method for this, but you can do this:

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

Upvotes: 1

Related Questions