Używam Mongoid i mam 2 modele, Flow i Node z odniesieniem do relacji rodzic-dziecko.
class Node
belongs_to :flow
end
class Flow
has_many :nodes
end
Kiedy chcę usunąć węzeł z przepływem, robię to:
flow.nodes.clear
To niszczy powiązane węzły. Co zrobić, jeśli chcę usunąć powiązanie między węzłem a przepływem bez niszczenia powiązanych węzłów? Czy jest na to sposób?
2 odpowiedzi
Powinieneś być w stanie użyć flow.nodes.clear
, o ile nie masz ustawionego :dependent => :destroy
. Z Przewodnika Rails na temat podstaw skojarzeń:
4.3.1.7 kolekcja.wyczyść
Metoda collection.clear usuwa każdy obiekt z kolekcji. To niszczy powiązane obiekty, jeśli są powiązane z :dependent => :destroy, usuwa je bezpośrednio z bazy danych if :dependent => :delete_all, i poza tym ustawia ich klucze obce na NULL.
Jeśli to nie działa, możesz spróbować tego i powinno to usunąć powiązanie:
flow.nodes = nil
EDYCJA 1
Jeśli nie, musisz utworzyć metodę ręcznego usuwania powiązania.
flow.nodes.update_all :flow_id => nil
Nie wierzę, że istnieje jakakolwiek wbudowana metoda na to, ale możesz to zrobić:
Node.where(:flow_id => flow.id).update_all(:flow_id => nil)
Podobne pytania
Nowe pytania
ruby-on-rails
Ruby on Rails to framework aplikacji internetowych typu open source z pełnym stosem, napisany w języku Ruby. Opiera się na popularnym modelu frameworkowym MVC i jest znany ze swojego podejścia do tworzenia aplikacji „konwencja zamiast konfiguracji”.
Flow
belongs_to :flow
literówka?