Rails 4: counter_cache в has_many: через ассоциацию с зависимым:: destroy
Хотя подобные вопросы уже задавались:
counter_cache с has_many: череззависимый => уничтожить ассоциацию "has_many through"has_many: через counter_cacheникто из них на самом деле не решает мою проблему.
У меня есть три модели, с ассоциацией has_many: through:
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
Модель администрирования объединения имеет следующие атрибуты:
id
user_id
calendar_id
role
Я хотел бы посчитать, сколькоcalendars
каждыйuser
есть и сколькоusers
каждыйcalendar
есть.
Я собирался пойти с counter_cache следующим образом:
class Administration < ActiveRecord::Base
belongs_to :user, counter_cache: :count_of_calendars
belongs_to :calendar, counter_cache: :count_of_users
end
(и, конечно, соответствующие миграции, чтобы добавить:count_of_calendars
кusers
стол и:count_of_users
кcalendars
Таблица.)
Но потом я наткнулся наэто предупреждение в Rails Guides:
4.1.2.4: зависимый
Если вы установите параметр: зависимый к:
: destroy, когда объект уничтожается, разрушение будет вызываться для связанных с ним объектов.: delete, когда объект уничтожается, все связанные с ним объекты будут удаляться напрямую из базы данных без вызова метода уничтожения.Вы не должны указывать эту опцию в ассоциации own_to, которая связана с ассоциацией has_many в другом классе. Это может привести к появлению осиротевших записей в вашей базе данных.
Поэтому, что было бы хорошей практикой посчитать, сколькоcalendars
каждыйuser
есть и сколькоusers
каждыйcalendar
есть?