2015-10-09 3 views
0

Допустим, у меня есть Conversation has_many Messages:Нетерпеливый нагрузка для has_many ассоциации (Rails)

И messages.rb:

class Message < ActiveRecord::Base 
    belongs_to :conversation 
end 

Как вы можете сказать, messages_for далека от оптимальной производительности мудрый. Каков наилучший способ получить нагрузку на связанные сообщения, так как в настоящий момент я получаю запрос каждый раз, когда я перебираю сообщения.

Обратите внимание, что я использую Rails 3.2.22, и я попытался использовать что-то вроде self.includes(:messages) и joint(:messages), пока не повезло.

Предполагая, что я не хочу использовать запрос напрямую, и я хочу, чтобы итерации через объекты.

Любая помощь будет оценена по достоинству.

+0

Пользователь является полем или другой моделью? – matanco

+0

В этом случае это еще одна модель, но это не имеет значения, поскольку я не хочу использовать SQL-запрос здесь, и я хочу перебирать сообщения с помощью ruby. –

ответ

1

Пользователи также являются моделью, и вы генерируете N + 1 в этом методе, потому что для каждого сообщения вы тянете пользователя так нетерпеливо, что это самое лучшее, что вы можете сделать.

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

Вы абсолютно правы, не заметили ассоциацию пользователей. Спасибо друг. –