Итак, у меня есть приложение с двумя разными моделями, комментариями и ответами, с каждой из которых вы можете согласиться или не согласиться, поэтому у меня есть полиморфная модель под названием 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 кэша счетчиков.