Rails 4.1.2 Eager load不会杀死N + 1个查询

时间:2014-09-19 16:06:20

标签: ruby-on-rails activerecord eager-loading

Rails:4.1.2,Ruby:2.1.1

我有Article班,commentablehas_many :comments

module Commentable
  extend ActiveSupport::Concern

  included do
    has_many :comments, :as => :commentable
  end
end

class Comment < ActiveRecord::Base

  belongs_to :commentable, :polymorphic => true, :touch => true
  belongs_to :user

  #other codes....
end

在显示文章时,我想加载所有相关信息

@item = Article.includes(:tags, {:comments => :user}).where(id: params[:id]).first

它确实预加载了标签和评论对象。

但是当我渲染comments时,注释对象和用户对象再次被加载。

= render @item.comments

来自日志:

development log

1 个答案:

答案 0 :(得分:0)

最后,我发现Rails不能包含polymorphic个关联。调用preload仍会在尽可能少的SQL语句中加载相关模型,但不允许查询相关模型。