Наиболее естественный способ сделать это:
book.rb
class Book < ActiveRecord::Base
has_many :chapters
end
chapter.rb
class Chapter < ActiveRecord::Base
belongs_to :book
has_many :pages
end
page.rb
class Page < ActiveRecord::Base
belongs_to :chapter
end
Затем, в каком бы виде вы ни находились, когда вы называете свою книгу (хамл):
- for chapter in @book.chapters
= chapter.title
- for page in chapter.pages
= page.content
, и вы можете разбивать на страницы, как считаете нужным.
РЕДАКТИРОВАТЬ В @apneadiving point, добавленовключает в себя для N + 1 запросов.Таким образом, из вашего books_controller.rb, чтобы уменьшить количество запросов, вы можете позвонить:
def show
@book = Book.includes(:chapters => [:pages]).find(params[:id])
end
Это загрузит Книгу со всеми связанными с ней главами и страницами без дополнительных запросов.