[英]Rails 3 eager loading of deep nested association
我正在構建一個包含以下流的公共活動流:
我正在使用public_activity gem來實現這一目標。
我的問題是是否有一種方法可以使用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
可跟蹤的可以是帖子或明星。 我有渲染功能來顯示兩者。 問題是,如果我嘗試輸出類似{user} starred {postcontent}的內容,它會這樣做:
activity.trackable.post.content
因此,每次查找帖子時,都會導致多個查詢。 我該如何解決這個問題/情況?
提前致謝。
您是否無法使用標准的預先加載語法?
@activities = PublicActivity::Activity.order("id desc").includes(:owner, :trackable => {:post => :content})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.