Полиморфные отношения и кэш-счетчик

Итак, у меня есть приложение с двумя разными моделями, комментариями и ответами, с каждой из которых вы можете согласиться или не согласиться, поэтому у меня есть полиморфная модель под названием Emotion. Вот мой код для них:

class Comment < ActiveRecord::Base
  belongs_to :user
  has_many :replies
  has_many :emotions, :as => :emotionable
end



class Reply < ActiveRecord::Base
  belongs_to :user
  belongs_to :comment
  has_many :emotions, :as => :emotionable
end

class Emotion < ActiveRecord::Base
  belongs_to :emotionable, :polymorphic => :true  
end

Итак, все работает нормально, но мне нужно добавить кэш-счетчик как для комментариев, так и для ответов, чтобы получить размер согласия и несогласия для каждого объекта. Во всех документах есть примеры кэширования счетчиков с обычными полиморфными ассоциациями, а не с дополнительным условием. Для справки, схема для Emotion выглядит следующим образом:

create_table "emotions", :force => true do |t|
  t.integer  "user_id"
  t.string   "emotion"
  t.integer  "emotionable_id"
  t.string   "emotionable_type"
  t.datetime "created_at",       :null => false
  t.datetime "updated_at",       :null => false
end

TL:DR — мне нужно иметь возможность вызывать @commet.agrees_count, @comment.disagrees_count, @reply.agrees_count и @reply.disagrees_count в полиморфной ассоциации через кеш счётчика. Таким образом, для комментариев и ответов потребуется 2 кэша счетчиков.

9
задан Synthesezia 21 March 2012 в 17:11
поделиться