Rails:创建具有可变类型答案的调查数据结构

时间:2016-05-08 16:44:12

标签: mysql ruby-on-rails

我在Rails应用中创建了一个调查答案数据结构来收集用户信息。我会问多种选择,数字字段和开放式问题的混合,因此我的(MySQL)数据结构将需要处理可变数据类型。我怎样才能做到这一点?我目前的计划基于先前的答案here

  1. 用户模型(参与者)
  2. 调查模型(调查)
  3. 问题模型(提出的问题)
  4. 选择模型(存储在' text'列中的问题的可能选择)
  5. 答案模型(将选择链接到参与者用户的答案)
  6. 这对于带有复选框的多选文本答案非常有用,但如果我希望答案是整数字段(例如"您的年龄是多少?")或者是开放式文本字段(如果例如"什么可以改进?")?

    不同类型字段

    我认为每种可能类型(例如文本,整数,日期时间等)都有多列的选择或答案模型会很糟糕,因为它会非常稀疏。

    每种类型的多个Choice表会更好吗? (例如Choice_Text,Choice_Integer等)

    但那么Answer模型如何链接到正确的表?

    开放式独特答案

    我应该将Answer模型中的唯一文本答案作为另一个数据列存储,还是每次都将Choice模型存储为新条目?

    非常感谢任何帮助。干杯!

1 个答案:

答案 0 :(得分:1)

所以我最终使用多态关联来链接不同类型的输入,并通过将它们添加到Choice_Text表来处理开放式文本答案。

如果将来有人遇到此问题,数据结构如下:

class Survey < ActiveRecord::Base
  has_many :survey_questions
  has_many :survey_attempts
end

class SurveyAttempt < ActiveRecord::Base
  has_many :survey_answers
  belongs_to :survey
  belongs_to :user
end

class SurveyQuestion < ActiveRecord::Base
  has_many :survey_choices
  belongs_to :survey
end

class SurveyChoice < ActiveRecord::Base
  has_many :survey_answers
  belongs_to :survey_question
  belongs_to :survey_choice_value, polymorphic: true
end

class SurveyChoiceString < ActiveRecord::Base
  has_many :survey_choices, as: :survey_choice_value
  has_many :survey_question, through: :survey_choices
end

class SurveyChoiceText < ActiveRecord::Base
  has_many :survey_choices, as: :survey_choice_value
  has_many :survey_question, through: :survey_choices
end

class SurveyChoiceInteger < ActiveRecord::Base
  has_many :survey_choices, as: :survey_choice_value
  has_many :survey_question, through: :survey_choices
end

class SurveyAnswer < ActiveRecord::Base
  belongs_to :survey_choice
  belongs_to :survey_attempt
end