RoR MongoID Lookup не работает? - PullRequest
       7

RoR MongoID Lookup не работает?

0 голосов
/ 28 августа 2018

Я новичок в MongoID (& mongoDB) и у меня проблемы с производительностью из-за извлечения данных из коллекции ссылок.

class Accounting::Invoice
  include Mongoid::Document

  belongs_to :contact, :class_name => 'Contact'
End

 class Contact
   include Mongoid::Document

   field :name, type: String
 end

Также используется гем 'kaminari-mongoid' для подкачки.

Упрощенная версия моего запроса:

@invoices = Accounting::Invoice.all.page(params[:page].to_i)

<% @invoices.each do |inv| %>
   <% inv.contact.name %>
<% end %>

Проблема в том, что когда я отображаю данные, чтобы просто получить имя из коллекции контактов, мне нужно повторно подключиться к БД и вытащить имя для каждого списка. Я попытался использовать $ lookup, однако, когда я делаю это, пейджинг с kaminari не работает ...

Любые предложения о том, как получить имя контакта без необходимости повторного подключения к базе данных?

Спасибо

1 Ответ

0 голосов
/ 28 августа 2018

Проблема с N + 1 запросом . Вы можете уменьшить количество запросов до 2, используя includes для ассоциации. В вашем случае:

Accounting::Invoice.includes(:contact)
                   .page(params[:page].to_i)

должен сделать трюк.

Поскольку он возвращает ActiveRecord::Relation объект, вы можете связать другие области и методы, которые применяются к Arels. Итак, если вы хотите использовать only с этим, сделайте это как:

Accounting::Invoice.includes(:contact)
                   .only(<list_of_attributes>)
                   .page(params[:page].to_i)
...