Rails 4: counter_cache in has_many: durch Assoziation mit Dependent:: destroy
Obwohl ähnliche Fragen bereits gestellt wurden:
counter_cache mit has_many: bisdependent => Zerstöre auf einer "has_many through" -Vereinigunghas_many: durch mit counter_cachekeiner von ihnen befasst sich tatsächlich mit meinem Problem.
Ich habe drei Modelle mit einer has_many: durch Assoziation:
class User < ActiveRecord::Base
has_many :administrations
has_many :calendars, through: :administrations
end
class Calendar < ActiveRecord::Base
has_many :administrations
has_many :users, through: :administrations
end
class Administration < ActiveRecord::Base
belongs_to :user
belongs_to :calendar
end
Das Join-Verwaltungsmodell weist die folgenden Attribute auf:
id
user_id
calendar_id
role
Ich möchte zählen, wie vielecalendars
jederuser
hat und wie vieleusers
jedercalendar
hat
Ich wollte mit counter_cache wie folgt gehen:
class Administration < ActiveRecord::Base
belongs_to :user, counter_cache: :count_of_calendars
belongs_to :calendar, counter_cache: :count_of_users
end
(und natürlich die entsprechenden Migrationen zum Hinzufügen von:count_of_calendars
zumusers
table und:count_of_users
zumcalendars
Tabelle.
Aber dann stolperte ich überdiese Warnung in Rails Guides:
4.1.2.4: abhängig von
Wenn Sie die abhängige Option auf: @ setz
: destroy, wenn das Objekt zerstört wird, wird destroy für die zugehörigen Objekte aufgerufen.: delete: Wenn das Objekt zerstört wird, werden alle zugehörigen Objekte direkt aus der Datenbank gelöscht, ohne dass die Zerstörungsmethode aufgerufen wird.Diese Option sollte nicht für eine Gehört-zu-Zuordnung angegeben werden, die mit einer has_many-Zuordnung für die andere Klasse verbunden ist. Dies kann zu verwaisten Datensätzen in Ihrer Datenbank führen.
Daher, was wäre eine gute Praxis, um zu zählen, wie vielecalendars
jederuser
hat und wie vieleusers
jedercalendar
hat