我在Rails应用中创建了一个调查答案数据结构来收集用户信息。我会问多种选择,数字字段和开放式问题的混合,因此我的(MySQL)数据结构将需要处理可变数据类型。我怎样才能做到这一点?我目前的计划基于先前的答案here:
这对于带有复选框的多选文本答案非常有用,但如果我希望答案是整数字段(例如"您的年龄是多少?")或者是开放式文本字段(如果例如"什么可以改进?")?
不同类型字段
我认为每种可能类型(例如文本,整数,日期时间等)都有多列的选择或答案模型会很糟糕,因为它会非常稀疏。
每种类型的多个Choice表会更好吗? (例如Choice_Text,Choice_Integer等)
但那么Answer模型如何链接到正确的表?
开放式独特答案
我应该将Answer模型中的唯一文本答案作为另一个数据列存储,还是每次都将Choice模型存储为新条目?
非常感谢任何帮助。干杯!
答案 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