我正在构建一个公共(public)事件流,其中包含以下流:
我正在使用 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} 加星标 {postcontent} 的内容,它会这样做:
activity.trackable.post.content
所以这会导致多次查询,每次它找到一个帖子。
我该如何解决这个问题/情况?
提前致谢。
最佳答案
您不能使用标准的急切加载语法吗?
@activities = PublicActivity::Activity.order("id desc").includes(:owner, :trackable => {:post => :content})
关于ruby-on-rails - Rails 3 急切加载深层嵌套关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17042965/