如何在MVC中建模一本书

时间:2011-07-15 04:52:25

标签: ruby-on-rails ruby-on-rails-3 model-view-controller data-modeling

如何在MVC中为书籍建模?我正在使用Ruby on Rails。

一本书有章节,章节有页面。

我应该使用书籍作为模型,还是应该为书籍,章节和页面分别使用单独的模型。

1 个答案:

答案 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

这将加载本书及其所有相关章节和页面,而无需进行其他查询。