Как удалить запись, не уничтожая ее? - PullRequest
1 голос
/ 24 июля 2011

Я использую Mongoid, и у меня есть 2 модели, Flow и Node со ссылками на родительские и дочерние отношения.

class Node
  belongs_to :flow
end

class Flow
  has_many :nodes
end

Когда я хочу удалить узел с потоком, я делаю это:

flow.nodes.clear

Это уничтожит связанные узлы. Что если я хочу удалить связь между узлом и потоком, не уничтожая связанные узлы? Есть ли способ сделать это?

Ответы [ 2 ]

3 голосов
/ 24 июля 2011

Вы должны иметь возможность использовать flow.nodes.clear, если у вас не установлено :dependent => :destroy.Из Руководства по Rails по основам ассоциации :

4.3.1.7 collection.clear

Метод collection.clear удаляет каждый объект из коллекции.Это уничтожает связанные объекты, если они связаны с: зависимый =>: уничтожить, удаляет их непосредственно из базы данных, если: зависимый =>: delete_all, и в противном случае устанавливает их внешние ключи в NULL .

Если это не работает для вас, вы можете попробовать это, и это должно удалить ассоциацию:

flow.nodes = nil

РЕДАКТИРОВАТЬ 1

Если нет, вам придетсясоздать метод удаления ассоциации вручную.

   flow.nodes.update_all :flow_id => nil
1 голос
/ 24 июля 2011

Я не верю, что есть встроенный метод для этого, но вы можете сделать это:

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