2016-12-06 1 views
0

Ich habe 3 Modelle. Für die Ex:Löschungen werden nicht in Assoziationen weitergegeben

a, b, c
a: 
has_many: bs 

b: 
belongs_to: a 
belongs_to: c 

c: 
has_many: bs 

so, jetzt das Problem ist, wenn ich einen Datensatz in c löschen, die mit b zugeordnet ist, wird die Änderung in b reflektiert wird, aber nicht in a.

Erwartete Änderung ist a.b.c Wert ist null, da c gelöscht wird. Aber es ist nicht null und zeigt immer noch den Wert wie früher.

Wenn ich den bestimmten Datensatz in b manuell aktualisiere und den Wert a.b.c überprüfe, ist es null.

Also, gibt es eine Lösung, um das zu beheben? etwas wie neu laden oder aktualisieren?

Danke.

PS: Ich verwende Activescaffolding, um Aktionen auszuführen.

LÖSUNG:

model c: 
has_many: bs, :dependent => :nullify 

Above Linie fixiert mein Problem. : D

+0

has_many: bs, abhängig: zerstören –

+0

abhängig: zerstören - bedeutet dies nicht den gesamten Datensatz löschen, statt den Wert zunichte macht? – Mounika

+0

betrachten Polymorphismus - http://guides.rubyonrails.org/association_basics.html#polymorphic-associations – marmeladze

Antwort

0

Wenn Sie eine has_many Assoziation haben, besitzen Sie nicht den Fremdschlüssel, also müssen Sie der anderen Seite der Assoziation sagen, sich selbst zu zerstören.

Sie können dies mit dem dependent: destroy Qualifier auf Ihrer has_many Assoziationen tun. Zum Beispiel, wenn Sie haben:

class Author < ApplicationRecord 
    has_many :articles, dependent: :destroy 
end 

class Article < ApplicationRecord 
    belongs_to :author 
end 

dann können Sie

author.destroy 

zu tun und alle Articles mit author ‚s author_id werden vernichtet.

+0

Hallo, ich habe kein Problem mit der ersten Assoziationsebene. Das Problem ist: Wenn ein Autor gelöscht wird, wird der Artikel erfolgreich aktualisiert. Nehmen wir an, dieser Artikel gehört zu: Gruppe. Autor in dem Artikel dieser Gruppe wird nicht aufgehoben. – Mounika

0

post.rb

class Post < ActiveRecord::Base 
    has_many :comments , dependent: :destroy 
end 

comment.rb

class Comment < ActiveRecord::Base 
     belongs_to :post 
end 

Wenn Sie es Kommentar zu demselben Post im Zusammenhang zerstören Post zerstören.

post.destroy 
Verwandte Themen