9

我正在构建一个公共活动流,其中包含以下流:

  1. 用户在 3 分钟前发布
  2. 用户为帖子加了星标

我正在使用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

所以这会导致多次查询,每次它找到一个帖子。我该如何解决这个问题/情况?

提前致谢。

4

1 回答 1

3

您不能使用标准的急切加载语法吗?

@activities = PublicActivity::Activity.order("id desc").includes(:owner, :trackable => {:post => :content})
于 2013-06-25T17:27:43.517 回答