9

Railsの深いネストされた協会の3熱心ロード

  1. ユーザーは
  2. ユーザー

ポストを主演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 

追跡可能、ポストやスターになることができます。 私は両方を表示するためのレンダリング関数を持っています。

activity.trackable.post.content 

だからこれは、複数のクエリでは、それはポストを見つけるたびに、結果: 問題は、私は{postcontentを}主演出力に{ユーザー}のような何かをしようとした場合、それをこのようにしています。 この問題/状況にはどのように対処しますか?

ありがとうございます。

答えて

3

標準eager読み込み構文を使用できませんか?

@activities = PublicActivity::Activity.order("id desc").includes(:owner, :trackable => {:post => :content}) 
+0

追跡可能オブジェクトには、属性として:contentを持たない他のポリモープクラスタイプを含めることもできます。 – swaroopsm

関連する問題