如何在 MVC 中为书籍建模

发布于 2024-11-23 16:17:21 字数 109 浏览 2 评论 0原文

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

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

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

How can I model a book in a MVC. I'm using Ruby on Rails.

A book has chapters, and chapters has pages.

Should I use a book as a model, or should there be seperate model each for book, chapter and then pages.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

神妖 2024-11-30 16:17:21

最自然的方法是:

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

您都可以按照您认为合适的方式进行分页。

编辑
对于@apneadiving 点,添加了 N+1 查询的包含内容。因此,从 books_controller.rb 中,为了减少查询数量,您可以调用:

def show
  @book = Book.includes(:chapters => [:pages]).find(params[:id])
end

这将加载图书及其所有关联的章节和页面,而无需执行其他查询。

The most natural way of doing this is:

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

Then in whatever view you are when you call your book (haml):

- for chapter in @book.chapters
  = chapter.title
  - for page in chapter.pages
    = page.content

and you can paginate however you see fit.

EDIT
To @apneadiving point, added includes for N+1 queries. So from your books_controller.rb, to reduce the number of queries, you can call:

def show
  @book = Book.includes(:chapters => [:pages]).find(params[:id])
end

This will load the Book with all of its associated chapters and pages without having to do additional queries.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文