我正在rails应用程序上创建一个'工作簿'ruby。基本上,用户将阅读一段或两段,然后根据他们阅读的内容回答一些问题。
我不确定如何对此进行建模。论文工作书有很多页面,每页都有很多段落。 我应该完全按照物理形式对其进行建模,还是应该简化模型?
我最大的问题是如何保存状态,以便用户在提交部分作业后可以更新其工作簿或进行更正?
答案 0 :(得分:2)
我认为这些关系对您有用:
class WorkBook
has_many :pages
class Page
belongs_to :work_book
has_many :paragraphs
class Paragraph
belongs_to :page
has_many :questions
class Question
belongs_to :paragraph
has_many :answers
class Answer
belongs_to :question
belongs_to :user
class User
has_many :answers
has_many :answered_questions, class_name: 'Question', through: :answers
如果你想更好地控制你的答案(比如value_string,value_float,value_boolean等),我建议你添加一个额外的模型“AnswerValue”。
在这种情况下,您可能会觉得模型太多,但请相信我,它会让您的应用变得灵活,并允许您在每个模型/关系上添加更多“细化”功能。
具有这些关系的扩展:您可以添加一个模型“AnswerCorrection”,它可以像一个答案,但是在用户更新它的工作簿之后可以保存另一个值。
希望这有帮助!
答案 1 :(得分:0)
我会选择这样的事情:
class PaperWork < ActiveRecord::Base
has_many :pages
has_many :paragraphs, through: :pages
end
class Page < ActiveRecord::Base
belongs_to :paper_work
has_many :paragraphs
end
class Paragraph
belongs_to :page
belongs_to :paper_work, through: :page
end
然后你可以根据这个想法对作业进行建模:
class Asignment < ActiveRecord::Base
belongs_to :user
belongs_to :paragraph
# attributes: description, status(pending, completed, etc.)
end