2016-05-08 3 views
0

Ich erstelle eine Umfrage-Antwort-Datenstruktur in meiner Rails App, um Benutzerinformationen zu sammeln. Ich werde eine Mischung aus Multiple-Choice-, Zahlenfeld- und Open-End-Fragen stellen, so dass meine (MySQL-) Datenstruktur mit einem variablen Datentyp umgehen muss. Wie kann ich das erreichen? Mein aktueller Plan basiert auf einer früheren Antwort here:Rails: Erstellen einer Umfragedatenstruktur mit Variablenantworten

  1. User-Modell (das particpant)
  2. Umfrage-Modell (die Umfrage)
  3. Frage-Modell (die Frage gestellt)
  4. Choice-Modell (mögliche Wahl für Frage gespeichert in ‚Text‘ Spalte)
  5. Antwort-Modell (die Antwort, die die Wahl für den Teilnehmer Benutzer Links)

Dies funktioniert gut für nur Multiple-Choice-Text-Antworten mit Kontrollkästchen, aber was ist, wenn ich möchte, dass eine Antwort ein Integer-Feld (z. "Wie alt sind Sie?" Oder ein offenes Textfeld (z. B. "Was könnte verbessert werden?")?

Verschiedene Arten Felder

Ich stelle mir vor, dass eine Wahl oder Antwort-Modell mit mehreren Spalten für jede mögliche Art (zum Beispiel Text, integer, Datetime, etc.) schlecht sein würde, wie es unglaublich spärlich wäre.

Wären mehrere Choice-Tabellen für jeden Typ besser? (z.B. Choice_Text, Choice_Integer usw.)

Aber wie würde dann das Antwortmodell mit der richtigen Tabelle verknüpft?

Öffnen endete einzigartige Antworten

Sollte ich einzigartige Textantworten in dem Antwortmodell als eine andere Datenspalte oder in der Wahl Modell als neuen Eintrag jedes Mal?

Jede Hilfe würde sehr geschätzt werden. Prost!

Antwort

0

Also endete ich mit einer polymorphen Zuordnung, um die verschiedenen Arten von Eingaben zu verknüpfen, und befasste sich mit offenen Textantworten, indem Sie sie der Tabelle Choice_Text hinzufügen.

Wenn jemand über diese in der Zukunft kommt, wurde die Datenstruktur wie folgt:

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 
Verwandte Themen