Rails 5.1: получение записей для вложенной ассоциации с включением

Я пытаюсь реализовать включает в ассоциацию has_many/belongs_to похоже на этот пример:

class Author < ApplicationRecord
  has_many :books, -> { includes :line_items }
end

class Book < ApplicationRecord
  belongs_to :author
  has_many :line_items
end

class LineItem < ApplicationRecord
  belongs_to :book
end

В тот момент, когда я делаю @author.books, я вижу в своей консоли, что он загружает Book и LineItem и показывает записи Book, записей для LineItem нет. Я получаю ошибку неопределенного метода при попытке @author.books.line_items. Также не работает @author.line_items.

Как мне получить LineItem записей для Author, пожалуйста? Спасибо!


person matiss    schedule 07.08.2017    source источник


Ответы (1)


Вам нужно будет добавить ассоциацию has_many к Author.

Вот так: has_many :line_items, through: :books, source: :line_items.

Затем, если вы сделаете author.line_items, вы получите LineItem записей для Автора.

То, как вы используете метод includes, позволяет вам получить доступ к line_items через книги . Что-то вроде этого: author.books.first.line_items, этот код не попадет в базу данных, потому что includes у вас в has_many :books, -> { includes :line_items } автоматически загрузился line_items

person MatayoshiMariano    schedule 07.08.2017
comment
параметр source в этом случае является необязательным (см. -of-rails" title="нужна помощь, чтобы понять вариант источника, у которого есть много сквозных рельсов"> stackoverflow.com/questions/4632408/) - person MrYoshiji; 07.08.2017
comment
Спасибо, это приятно :) Работает как шарм! Мне показалось, что это сработало, когда я перешел на source: :line_items - как во множественном числе. Может там опечатка. - person matiss; 07.08.2017
comment
@matiss да, это опечатка! Отредактировано! - person MatayoshiMariano; 07.08.2017