9

buduję Aktywność publiczna, która zawiera strumień z następujących czynności:Rails 3 chętny ładowanie głęboko zagnieżdżonych stowarzyszenia

  1. user posted 3 minuty temu
  2. użytkownika wystąpił post

Używam klejnotu public_activity, aby to osiągnąć.

Moje pytanie brzmi, czy istnieje sposób użycia includes dla funkcji polimorficznej.

Kod, który używam obecnie przedstawia się następująco:

#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 

śledzenia mogą być post lub gwiazdą. Mam funkcje renderowania do wyświetlania obu. Problem jest, gdy próbuję coś takiego wyjścia {user} {postcontent zagrała}, robi to w ten sposób:

activity.trackable.post.content 

Więc Skutkuje to wieloma zapytaniami, za każdym razem znajdzie słupek. Jak rozwiązać ten problem/sytuację?

Z góry dziękuję.

Odpowiedz

3

Nie można użyć standardowej składni ładowanie ładowanie?

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

Zestaw do śledzenia może również zawierać inny rodzaj klasy polimorficznej, whicj może nie mieć: treści jako atrybutu. – swaroopsm

Powiązane problemy