Задать вопрос
Demigodd
@Demigodd

Как не вызвавть запрос к ДБ при каждой итераций?

Существует такой код.
# BOOK model
belongs_to :author

# AUTHOR model
has_many :book

# CATEGORY model
has_many :author

def function
  books.select{ |book| book.author.category.type.eql?('fantastic') }
end


Связи могут вас как то спутать, но не в этом суть.
Проблема в том что при каждой итераций происходит запрос к ДБ.

Пробовал решить проблему через includes.

def function
  books
    .includes({
      author: {
        category: {}
      }
    })
    .select{ |book| book.author.category.type.eql?('fantastic') }
end


Но при вызове дает undefined method `includes' for #Array:0x000...

А если взять id и осуществить поиск по модели, будет ли это хорошим решением ?
def function
  Books
    .includes({
      author: {
        category: {}
      }
    })
    .where(id: books.pluck(:id))
    .select{ |book| book.author.category.type.eql?('fantastic') }
end


Буду рад видеть ваши варианты для сокрашений запросов к ДБ при каждой итераций, так как я уже не знаю что еще можно сделать.
  • Вопрос задан
  • 115 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
blackst0ne
@blackst0ne
Фулстэк-разработчик
# books здесь - ActiveRecord::Relation
books.includes(author: [:categories]).select do |book| 
  book.author.category.type == "fantastic" 
end
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы