buduję Aktywność publiczna, która zawiera strumień z następujących czynności:Rails 3 chętny ładowanie głęboko zagnieżdżonych stowarzyszenia
- user posted 3 minuty temu
- 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ę.
Zestaw do śledzenia może również zawierać inny rodzaj klasy polimorficznej, whicj może nie mieć: treści jako atrybutu. – swaroopsm