9

Ich baue eine öffentliche Tätigkeit Strom, der einen Strom von der folgenden enthält:Rails 3 eifrig Laden von tief verschachtelten Vereinigung

  1. Benutzer vor 3 Minuten geschrieben
  2. Benutzer spielte einen Beitrag

Ich benutze dafür den Edelstein public_activity.

Meine Frage ist, ob es eine Möglichkeit gibt, die includes für eine polymorphe Funktion zu verwenden.

Der Code, den ich zur Zeit läuft wie folgt:

#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 

Der verfolgbare ein Beitrag oder ein Stern sein kann. Ich habe Render-Funktionen für die Anzeige von beiden. Das Problem ist, wenn ich die Ausgabe etwas wie {user} try {Lieblings postcontent}, tut es es so aus:

activity.trackable.post.content 

So führt dies in mehreren Abfragen, jedes Mal, wenn eine Stelle findet. Wie gehe ich dieses Problem/Situation an?

Vielen Dank im Voraus.

Antwort

3

Können Sie die Standard-Eager-Ladesyntax nicht verwenden?

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

Das verfolgbare Objekt kann auch einen anderen polymorphen Klassentyp enthalten, der keinen a: content als Attribut haben darf. – swaroopsm

Verwandte Themen