簡體   English   中英

Rails 3急切加載深層嵌套關聯

[英]Rails 3 eager loading of deep nested association

我正在構建一個包含以下流的公共活動流:

  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} 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM