has_many 关联 (Rails) 的预加载

Eager loading for has_many associations (Rails)

假设我有 Conversation has_many Messages:

class Conversation < ActiveRecord::Base
  has_many :messages, dependent: :destroy

  def messages_for(u)
    messages.map do |msg|
      if msg.user == u
        msg if msg.attr1.nil?
      else
        msg if msg.attr2.nil?
      end
    end
  end
end

和messages.rb:

class Message < ActiveRecord::Base
  belongs_to :conversation
end

如您所知,messages_for 远未达到最佳性能。什么是急切加载关联消息的最佳方式,因为我每次遍历消息时都会收到查询。

请注意,我正在使用 Rails 3.2.22 并且我尝试使用 self.includes(:messages)joint(:messages) 之类的东西,但到目前为止没有成功。

假设我不想直接使用查询,我确实想遍历对象。

如有任何帮助,我们将不胜感激。

用户也是一个模型,您在这种方法中生成 N+1,因为对于每条消息,您都会拉动用户如此急切地加载它,这是您能做的最好的事情。

self.includes(messages: :users).messages.map |msg|
  // rest of the code
end