2016-02-07 4 views
2

Есть ли способ сделать что-то вроде:Включает только с определенными атрибутами

Book.includes(authors: {only: :first_name}) 

Я только хочу, чтобы атрибут, а не вся модель Автора.

+0

вы можете использовать 'select' –

+0

вы можете выбрать из включенной модели? Можете ли вы показать мне, как это работает? Мой выбор держится от книги – Ashbury

+0

'Book.includes (: authors) .select ('authors.first_name')' –

ответ

0

Нет, вы не можете. Если вы не хотите, чтобы загрузить все данные, которые вы можете загрузить книги, а затем запустить отдельный запрос на авторов, чтобы принести их имена в одиночку:

books = Book.where(something_here) 
author_ids = books.map(&:author_id) 
author_names = Author.where(id: author_ids).pluck(:id, :first_name) 
0

Вы можете использовать select, чтобы получить :first_name свойство каждого автора.

authors_first_names = Author.select(:first_name) 

См selecting specific fields в руководстве Rails для Active Record Query Interface.

0

Как о чем-то вроде:

Book.joins(:authors).select("books.*, authors.name as author_name") 

Каждого экземпляр в результате отношений будет repond к author_name без выполнения дополнительного оператора SQL.

Смежные вопросы