Rails Associations and db design for Quiz Application

后端 未结 2 1803
难免孤独
难免孤独 2021-01-14 23:52

I am building this quiz application. I want it to be kinda sophisticated.

I have come up with this database schema. But I am really confused.. Confused about what a

相关标签:
2条回答
  • 2021-01-15 00:12

    Let's see, that would be:

    # For Questions: 
    :has_many => :answers
    :belongs_to => :test_question
      # questions table should have the "test_question_id" column
    
    # Answers:
    :has_many => :candidate_answers
    :belongs_to => :question 
      # Answers table should have the "question_id" column
    
    #Test Questions:
    :has_many => :questions
    :has_many => :candidate_answers
    :belongs_to => :test
      # test questions table should have the "test_id" column but not the "question_id"
    
    #Tests: 
    :has_many => :results
    :has_many => :test_questions
    :has_many => :candidates, :through => :results, :foreign_key => "candidate_id" #why not? ^^
    
    #Results
    :belongs_to => :test
    :belongs_to => :candidate
      # Results table should have the "test_id" and "candidate_id" columns
    
    #candidate_answers 
    :belongs_to => :candidate
    :belongs_to => :test_question
    :belongs_to => :answer
      # candidate_answers table should have the "test_question_id", "candidate_id" and "answer_id" columns
    
    #Candidates
    :has_many => :candidate_answers
    :has_many => :results
    :has_many => :answered_tests, :class_name => "test", :through => :results, :foreign_key => "test_id" # again, why not?
    

    And with the information you gave, that should do what you want. ;)

    0 讨论(0)
  • 2021-01-15 00:27

    This should do:

    • Drop candidate_answers.test_question
    • Drop the candidate_answers table
    • Drop the test_questions table

      class Test < ActiveRecord::Base has_many :results has_many :questions end

      class Result < ActiveRecord::Base belongs_to :test belongs_to :candidate end

      class Candidate < ActiveRecord::Base has_many :results has_many :answers end

      class Answer < ActiveRecord::Base belongs_to :question belongs_to :candidate end

      class Question < ActiveRecord::Base belongs_to :test has_many :answers end

    It looks like you were intending to reuse the answers for more than one question, that would be a generally bad idea.. Better clone an answer in that case.

    0 讨论(0)
提交回复
热议问题