Как вызвать несколько counter_cache в одной модели как has_many: через - PullRequest
0 голосов
/ 09 ноября 2011

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

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 Ответ

0 голосов
/ 14 марта 2012

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

...