Я строю поток общественной активности, который содержит поток следующее:Rails 3 жадная загрузка глубокой вложенной ассоциации
- Пользователь отправил 3 минуты назад
- Пользователь избранные пост
Для достижения этой цели я использую жемчужину public_activity.
Мой вопрос заключается в том, есть ли способ использовать includes
для полиморфной функции.
Код, который я бегу в настоящее время выглядит следующим образом:
#app/models/post.rb
class Post < ActiveRecord::Base
include PublicActivity::Common
attr_accessible :content, :visibility
validates_presence_of :content
belongs_to :postable, :polymorphic => true
has_many :stars
end
#app/models/star.rb
class Star < ActiveRecord::Base
include PublicActivity::Common
validate :duplicate_star
belongs_to :user
belongs_to :post
private
def duplicate_star
errors.add(:base, "Post already starred") if Star.exists?(:user_id => self.user, :post_id => self.post)
end
end
#app/controllers/users_controller.rb
class UsersController < ApplicationController
def index
@post = Post.new
@activities = PublicActivity::Activity.order("id desc").all.includes(:trackable, :owner)
end
end
отслеживаются может быть пост или звездой. У меня есть функции для отображения обоих. Проблема заключается в том, если я пытаюсь выводить что-то вроде {пользователь} {снялся PostContent}, он делает это так:
activity.trackable.post.content
Так что это приводит к несколько запросов, каждый раз, когда он находит пост. Как решить эту проблему/ситуацию?
Заранее спасибо.
Отслеживаемый может также содержать другой тип типа полиморфного типа, у которого может не быть: содержание как атрибут. – swaroopsm