我在确定为教育平台创建讲座和测验的最佳方法时遇到了问题。
首先,我有两个模型:
Course.rb
class Course < ApplicationRecord
has_many :sections
accepts_nested_attributes_for :sections, reject_if: :all_blank, allow_destroy: true
end
Section.rb
class Section < ApplicationRecord
belongs_to :course
end
并且在视图中我使用cocoon gem来嵌套表单并从同一个新页面创建课程和部分。
我的目标是建立一个有两种类型的课程模型(讲座是一个带有注释和评论的视频,一个带有问题和答案的测验),问题是我无法找到适合这种方法的方法问题
到目前为止,这就是我的想法:
使用STI,所以我有一个属于某个部分的课程模型,并且有两个模型继承自课程模型讲座和测验,如下所示:
Lesson.rb
class Lesson < ApplicationRecord
belongs_to :section
end
Lecture.rb
class Lecture < Lesson
end
Quiz.rb
class Quiz < Lesson
end
这让我感到困惑的是测验模型它会有很多其他的联想,比如问题,答案和正确的答案,所以我想知道我是否走在正确的道路上或者没有?
使用railscasts中的动态表单,我发现这种问题更令人困惑。
请记住,我需要他们的讲座和测验模型属于课程模型,所以我可以将数据列为列表,我可以跟踪进度。
或者我应该为测验和讲座创建独立模型,并使它们属于课程模型,其中课程模型有一个测验或讲座。
答案 0 :(得分:1)
首先,确定最佳数据模型并忽略演示文稿。之后,请关注您想要如何呈现数据。
我建议使用“有一个”关系而不是STI - 换句话说就是你在“更新1”中推荐的方法。原因是讲座和测验看起来非常不同,所以他们似乎不适合STI。您可以使用Lesson和Quiz / Lecture对象之间的多态“lesson_content”关系,但我会从简单的has_one / has_many开始。
实施后,您可以使用Cocoon或滚动自己的动态表单。我发现(优秀的)Railscast已经过时,并写了一篇可能在这里使用的博客文章: Dynamic forms with Rails 4