我有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|
之外,显示所有页面的最佳方式是什么?
答案 0 :(得分:0)
Writer.first.books
是一个集合,它会显示第一个Writer
中的所有图书,这就是为什么您在调用pages
时看到错误的原因;需要从pages
或Book
对象(不是集合)调用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