假设我有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)
的内容,但目前还没有运气。
假设我不想直接使用查询,我确实希望迭代这些对象。
任何帮助将不胜感激。
答案 0 :(得分:1)
用户也是一个模型,你在这个方法中生成N + 1,因为对于每条消息,你拉动用户如此渴望加载它就是你能做到的最好。
self.includes(messages: :users).messages.map |msg|
// rest of the code
end