Как запустить несколько counter_cache в одной модели как has_many: через

#ruby-on-rails #ruby #activerecord #counter-cache

#ruby-on-rails #ruby #activerecord #кэш счетчика

Вопрос:

У меня есть 3 модели (Аллен, Боб, Крис), которые полиморфны с моделью объединения. и пользовательскую модель, которая соединяется с моделью объединения.

 class Allen < ActiveRecord::Base
  has_many :joins, :as => :resource
  ...
end

class Bob < ActiveRecord::Base
  has_many :joins, :as => :resource
  ...
end

class Chris < ActiveRecord::Base
  has_many :joins, :as => :resource 
  ...
end

class Join < ActiveRecord::Base
  belongs_to :initiator, :class_name => "User", :foreign_key => "user_id"
             :counter_cache => "How to write with 3 different counter cache?"

  belongs_to :resource, :polymorphic => true, :counter_cache => :resources_count
end

class User < ActiveRecord::Base
  has_many :joins
  has_many :allens, :through => :joins, :source => :initiator

  has_many :initial_joins, :class_name => "Join"
end
  

Мой вопрос заключается в том, как записать кэш счетчика для Боба, Криса и Аллена в пользовательской модели

или вы можете ознакомиться с этим здесь:https://gist.github.com/1350922

Ответ №1:

Я думаю, стандартного способа добиться этого нет. Добавьте after_create обратный вызов к вашему Allen , Bob и Chris где вы получите список всех User файлов, связанных с этим конкретным, Bob и пересчитайте bobs_count для каждого из них вручную.