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_cache

keiner 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

Antworten auf die Frage(2)

Ihre Antwort auf die Frage