rails通过记录访问所有has_many

时间:2017-06-01 23:46:43

标签: ruby-on-rails activerecord

我有3个模特:作家,书,页。

Writer has_many :books
Writer has_many :pages, through: :books
Book has_many :pages

我希望通过本书显示属于作者的所有页面,但它会发出错误:

Writer.first.books #=> works, shows all writer books
Book.first.pages #=> works, shows all book pages
Writer.first.books.pages #=> does not work, must in theory display all pages that belong to the writer

除了使用each do |x|之外,显示所有页面的最佳方式是什么?

1 个答案:

答案 0 :(得分:0)

Writer.first.books是一个集合,它会显示第一个Writer中的所有图书,这就是为什么您在调用pages时看到错误的原因;需要从pagesBook对象(不是集合)调用Writer

因此,假设您的关联完整,例如:

class Writer < ApplicationRecord
  has_many :books
  has_many :pages, through: :books
end

class Book < ApplicationRecord
  belongs_to :writer
  has_many   :pages
end

class Page < ApplicationRecord
  belongs_to :book
end

您应该可以直接在pages上拨打电话Writer,如下所示:

Writer.first.pages