【问题标题】:Modeling A Book With Ruby on Rails Active Record使用 Ruby on Rails Active Record 建模一本书
【发布时间】:2010-12-06 19:13:09
【问题描述】:

我正在使用 ruby​​ on rails 为在线书籍建模。这本书有章节,每一章都有页。对这部分进行建模很容易。 id 喜欢做的是跟踪每个用户阅读了哪些页面以及他们何时以及他们是否喜欢该页面/用户是否完成了这本书。一个人会如何建议建模在 Rails 中跟踪这一点?理想情况下,我想说给我用户正在阅读或已经阅读的所有书籍,然后可以访问该书以及该用户阅读该书的状态信息。

【问题讨论】:

    标签: ruby-on-rails oop data-modeling


    【解决方案1】:

    这很有意义。我看到的一个问题是收集一个问题的统计数据(回答的时间百分比是多少)?由于该数据在序列化哈希中?这个呢:

    book
        has_many user_books
     has_many users through user_books
     has_many chapters
    
    chapter
     belongs_to book
     has_many pages
    
    page
     belongs_to chapter
     has_many user_pages
    
    user
        has_many user_books
     has_many books through user_books
    
    user_book
     belongs_to user
     belongs_to book
     has_many user_pages
    
    user_page
     belongs_to user_book
     belongs_to page
    

    你怎么看?

    【讨论】:

    • 当然,这似乎可行。您将如何指示一章中的页面顺序?
    • 很好,页面必须有一个 order 变量。再次感谢雅各布所做的一切。
    【解决方案2】:

    BookState 成为用户和书籍之间的中间对象。

    class User < ActiveRecord::Base
       has_many :book_states
       has_many :books, :through => :book_state
    end
    
    class BookState < ActiveRecord::Base
       belongs_to :user
       belongs_to :book
    end
    
    class Book < ActiveRecord::Base
       has_many :book_states
    end
    

    BookState 包含当前位置、喜欢/不喜欢等。如果您询问用户的 bookStates,那么也会给您书籍。

    【讨论】:

    • 嗨,Jacob,感谢您的快速回复。但是,如果我们跟踪用户阅读特定页面(他们阅读了一些页面,跳过了一些页面),并且我们希望能够向他们展示显示哪些页面/部分被阅读/跳过的书籍副本,该怎么办。我们会不使用 BookState 而是使用 PageState 吗?不过,这似乎提出了一系列问题。
    • 我将页面状态建模为图书状态中的哈希值。
    • 然后手动填充/绘制模型顶部的状态,而不是页面状态和实际页面本身之间的逻辑关系?
    • 是的,也许有某种 BookRenderer 助手可以根据页面状态的哈希等“过滤”图书。
    • 这样,pagestate 就不再与图书的内部表示相关联,您可能想更改它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-25
    • 1970-01-01
    • 2018-05-08
    • 1970-01-01
    • 1970-01-01
    • 2019-11-09
    相关资源
    最近更新 更多