ActiveRecord模型,具有可变数量和字段顺序作为关系

时间:2016-07-21 19:36:51

标签: ruby-on-rails activerecord

我正在尝试使用与Google表单类似的功能创建一个应用程序,用户可以在其中确定不同问题类型的模板,然后针对每个模板收集多个响应。具体来说,我需要创建具有用户自定义数量(和顺序)的免费响应(段落文本字段)和图片上传问题的表单。

我如何在ActiveRecord中设置此方案?我正在考虑使用FormResponse模型来存储每个回复,has_many类型的QuestionResponse个模型TextResponse用于回答每个问题,UploadResponse和{{1}模型作为QuestionResponse的单表继承类。使用ActiveRecord存储这种结构有更优雅的方法吗?我应该如何在这样的模式中存储模板,问题的结构?我最好使用Mongo的灵活文档模型,并将问题响应文档嵌入到表单响应文档中的列表中吗?

2 个答案:

答案 0 :(得分:0)

一个常见的概念是分别考虑结果和问卷,并将每个受访者的所有汇总结果存储在一条记录中。如果您使用的是Postgres,则可以使用此JSON数据类型。或者单个Mongo文档也可以工作。

答案 1 :(得分:0)

您无需使用单表继承来完成此操作。

# Surveys have questions
class Survey < ActiveRecord::Base
    has_many :survey_questions
end
class SurveyQuestion
    belongs_to :survey
    belongs_to :question, polymorphic: true
    acts_as_list # This is where you order your questions
end

# Questions are independent, and can be used
# in multiple Surveys
class UploadQuestion < ActiveRecord::Base; end
class TextQuestion < ActiveRecord::Base; end

# User responses are associated with the specific
# question as it appears in a Survey. Response
# table rows don't need extraneous columns.
class User < ActiveRecord::Base; end
class TextResponse < ActiveRecord::Base
    belongs_to :user
    belongs_to :survey_question
end
class UploadResponse < ActiveRecord::Base
    belongs_to :user
    belongs_to :survey_question
end