如何在MVC中为书籍建模?我正在使用Ruby on Rails。
一本书有章节,章节有页面。
我应该使用书籍作为模型,还是应该为书籍,章节和页面分别使用单独的模型。
答案 0 :(得分:3)
最自然的做法是:
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
然后,当你打电话给你的书(haml)时,无论你是什么视图:
- for chapter in @book.chapters
= chapter.title
- for page in chapter.pages
= page.content
然后你可以分页,但你认为合适。
EDIT 要@apneadiving点,添加包含N + 1个查询。因此,从books_controller.rb中,为了减少查询次数,您可以调用:
def show
@book = Book.includes(:chapters => [:pages]).find(params[:id])
end
这将加载本书及其所有相关章节和页面,而无需进行其他查询。