【问题标题】:How to save Responses of dynamically created Forms by Users如何保存用户动态创建的表单的响应
【发布时间】:2016-06-17 21:36:27
【问题描述】:

我对 Ruby on Rails 比较陌生。

我有一个用户可以创建表单的应用。 我已经声明了用户 has_many forms 和 forms belongs_to user。

此外,Forms 有一个嵌套模型Item,代表Form 的问题,允许用户制作一个Form 有多个问题。此外,Item has_many Answers,因此一个问题可以有多个答案(例如单选或复选框类型的问题)。最后,一个 Answer has_many Results 允许为每个答案存储多个值,如果它是由不同的人提交的。

用户也有 Children,我希望他们应用他们创建的 Forms

我怎样才能做到这一点? 您是否建议在我的 Child 模型和 Form 模型之间创建关联?

你会怎么做?


所以我只需要让一个user 创建的forms 可以为用户的每个孩子回答。


更新:

于是我想出了以下想法:

formchildren 之间创建一个连接表,以映射哪些表单应用于哪个孩子。

此外,result 模型应该有一个 answer_id 列作为它响应的答案。而且我猜它需要另一列来指向上面连接表的id 来映射form-child 属于哪个。

¿你认为这个逻辑对吗?


当显示要使用的表单时,我计划显示form.title,通过每个项目循环进入他们的项目并显示其item.title,然后再次通过每个答案循环进入其答案并显示其类型和标签每个结果的form_fields 的字段类型和标签。

现在的问题是我该如何做到这一点? 我知道如何创建和保存特定数量的Objects,但不知道动态数量的对象。

代码:

form.rb

belongs_to :user
has_many :items, dependent: :destroy
accepts_nested_attributes_for :items, allow_destroy: true

item.rb

belongs_to :form
has_many :answers, dependent: :destroy
accepts_nested_attributes_for :answers, allow_destroy: true

answer.rb

belongs_to :item

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    让我指出您当前架构中可能存在的问题:

    Answer has_many 结果允许稍后为每个答案存储多个值(如果它是由不同的人提交的)

    => 如果我们想查询Form 中特定User 有多少正确答案或Form 总共有多少正确答案会发生什么?

    用户也有孩子,我希望他们应用他们创建的表单

    => 这有点令人困惑,在UserForm 之间我们有关系:User 可以创建许多FormsUser 可以通过模型应用许多Form Children

    我之前研究过这种问题,这是我建议的架构:

    说明

    • User 有很多 Form 通过创建动作
    • Form 有很多 Item
    • Item 有很多 Question
    • Question 有很多 Answer(答案是正确/错误)

    • User 应用 1/many Form,每次这样,在 UserForm 之间创建一个 AnswerSheet

    • AnswerSheet 包含许多 SelectedAnswer,所以 SelectedAnswer 属于 AnswerSheet 和原始 Answer。此外,SelectedAnswer 是由用户选择 Answer 的操作创建的

    这样更清楚,我们可以用真正的含义解释模式,因此更容易理解和实现

    一个注释我使用AnswerSheet而不是你的Children,我认为这是有道理的,你可以使用任何你想要的术语,但要确保人们理解它:)

    【讨论】:

    • 感谢您的回答。好的,首先,我应该解决问题不会有正确/不正确的答案,但是查询特定答案可能是个好主意。也许这就是我要找的东西,我必须试一试。
    • 我无法实施您的解决方案。现在的目标是能够创建和保存动态数量的results,具体取决于一个表单可以有多少itemsanswers
    • 架构将符合您的期望,您的问题是什么,您能详细描述一下吗?
    • 我现在遇到的问题是,当我为result 制作表单时,它只能识别一个字段并将其存储到数据库中。我希望能够只用一个提交按钮为result 制作一个表单。我将在原帖中详细说明。
    • 所以最终创建了一个模型answered_form,它既有子id,也有表单id,还有has_many answers,并且能够创建一个form_for answered_form,它接受answers的嵌套属性。感谢您帮助我重新定义方式并实现它。
    【解决方案2】:

    根据您的场景,我想向您推荐孩子和表单之间存在多对多关系,并且孩子有_many结果。

    【讨论】:

    • 好的,但这究竟能让我做什么?如何使用用户创建的表单,然后将其应用于他们的孩子?不知何故,我需要显示用户为孩子创建的特定表单,然后能够将每个“结果”的值存储在数据库中。
    猜你喜欢
    • 2023-03-08
    • 1970-01-01
    • 2014-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多