gpt4 book ai didi

ruby-on-rails - Rails 多种帖子类型 : nested forms and complex association

转载 作者:太空宇宙 更新时间:2023-11-03 16:17:19 25 4
gpt4 key购买 nike

我在找出为教育平台创建讲座和测验的最佳方法时遇到了问题。

首先我有两个模型:

类(class).rb

class Course < ApplicationRecord
has_many :sections
accepts_nested_attributes_for :sections, reject_if: :all_blank, allow_destroy: true
end

节.rb

class Section < ApplicationRecord
belongs_to :course
end

在 View 中,我将 cocoon gem 用于嵌套表单并从同一个新页面创建类(class)和部分。

我的目标是有一个有两种类型的类(class)模型(讲座是带有注释和评论的视频,以及带有问题和答案的测验),问题是我无法找到正确的方法问题。

到目前为止,这就是我的想法:

方法一:

使用 STI ,所以我有一个属于一个部分的类(class)模型,并且有两个继承自类(class)模型讲座和测验的模型,如下所示:

类(class).rb

class Lesson < ApplicationRecord
belongs_to :section
end

讲座.rb

class Lecture < Lesson
end

测验.rb

class Quiz < Lesson
end

让我感到困惑的是测验模型,它会有很多其他关联,例如问题、答案和正确答案,所以我想知道我是否走在正确的道路上?

方法二:

使用 railscasts 中的动态表单我发现这是解决此类问题的更令人困惑的方法。

请记住,我需要将讲座和测验模型都属于类(class)模型,这样我就可以将数据列为列表,并可以跟踪进度。

更新 1:

或者我应该为测验和讲座创建独立的模型,并使它们属于一个类(class)模型,该类(class)模型有_一个测验或讲座。

最佳答案

首先,确定最佳数据模型并忽略表示。之后,关注您希望如何呈现数据。

我建议使用“具有”关系而不是 STI - 换句话说,您在“更新 1”中推荐的方法。原因是讲座和测验看起来非常不同,所以它们似乎不太适合 STI。您可以在 Lesson 和 Quiz/Lecture 对象之间使用多态“lesson_content”关系,但我会从普通的 has_one/has_many 开始。

实现后,您可以使用 Cocoon 或滚动您自己的动态表单。我发现(优秀的)Railscast 已过时并写了一篇可能在这里有用的博客文章: Dynamic forms with Rails 4

关于ruby-on-rails - Rails 多种帖子类型 : nested forms and complex association,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40824929/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com