Activerecord, эффективный способ стремиться загрузить это много ко многим ассоциациям - PullRequest
0 голосов
/ 19 мая 2019

Я пытаюсь оптимизировать код моего приложения rails и рефакторинг запроса контроллера.

На моей домашней странице есть блок обложки с некоторым содержанием в качестве доказательства и некоторым содержанием.

это моя модель обложки

class Cover < ApplicationRecord
  has_many :elements, class_name: 'CoverElement', dependent: :destroy
  has_many :contents, :through => :elements
  scope :published,      -> { where arel_table[:published_at].lteq Time.zone.now }

  def self.current
    published.first
  end
end

Содержание класса является обычным классом. В моей таблице elements есть некоторые атрибуты, которые мне нужны для моего представления.

Теперь я запрашиваю обложку с элементами обложки с помощью

@cover = Cover.includes(:elements).joins(:contents).current

И мое содержимое с

@contents = Content.published.where.not(id: cover.contents.pluck(:id)).limit(30)

Содержимое, связанное с content element, исключается из второго запроса.

Затем, на мой взгляд, я зацикливаюсь в своем представлении на cover.elements, и для каждого element я использую атрибуты от element и от связанных content.

Есть ли более эффективный способ загружать элементы обложки содержимым партнеров и моим содержимым?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...