Rails 4.1.2 Eager Load Doesn't Kill N+1 Query

Rails: 4.1.2, Ruby: 2.1.1

I have an Article class, which is commentable and has_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

``

when display the article, I’d like to load all releated information

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

``

and it does preload tags and comments object.

but when I render comments, the comments object and user objects get loaded again.

= render @item.comments

``

from log:

I think maybe you’re problem has to do with the polymorphism (although the syntax looks right to me and it is possible to eager load with a polymorphic association).

Did you try bullet? https://github.com/flyerhzm/bullet

Really, try bullet, it will automatically tell you exactly the code to write to kills those N+1s. It’s kind of amazing.

-Jason