Есть ли способ сделать что-то вроде:Включает только с определенными атрибутами
Book.includes(authors: {only: :first_name})
Я только хочу, чтобы атрибут, а не вся модель Автора.
Есть ли способ сделать что-то вроде:Включает только с определенными атрибутами
Book.includes(authors: {only: :first_name})
Я только хочу, чтобы атрибут, а не вся модель Автора.
Нет, вы не можете. Если вы не хотите, чтобы загрузить все данные, которые вы можете загрузить книги, а затем запустить отдельный запрос на авторов, чтобы принести их имена в одиночку:
books = Book.where(something_here)
author_ids = books.map(&:author_id)
author_names = Author.where(id: author_ids).pluck(:id, :first_name)
Вы можете использовать select
, чтобы получить :first_name
свойство каждого автора.
authors_first_names = Author.select(:first_name)
См selecting specific fields в руководстве Rails для Active Record Query Interface.
Как о чем-то вроде:
Book.joins(:authors).select("books.*, authors.name as author_name")
Каждого экземпляр в результате отношений будет repond к author_name
без выполнения дополнительного оператора SQL.
вы можете использовать 'select' –
вы можете выбрать из включенной модели? Можете ли вы показать мне, как это работает? Мой выбор держится от книги – Ashbury
'Book.includes (: authors) .select ('authors.first_name')' –