Rails 5.1:检索与包含嵌套关联的记录

时间:2017-08-07 16:42:45

标签: ruby-on-rails ruby activerecord ruby-on-rails-5.1

我尝试在has_many / belongs_to关联中实施includes,与此示例相似:

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时,我在控制台中看到它加载BookLineItem并显示Book的记录,没有LineItem的记录。我尝试@author.books.line_items时遇到未定义的方法错误。 @author.line_items也不起作用。

如何获取LineItem的{​​{1}}条记录,好吗?谢谢!

1 个答案:

答案 0 :(得分:5)

您需要向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