我正在构建此测验应用程序。我希望它有点复杂。
我已经提出了这个数据库架构。但我真的很困惑。对于我需要什么样的关联和东西感到困惑。
嗯..有一点需要注意的是,当创建测试时,没有关于将接受测试的候选人数量的信息。因此,我将test_questions
和candidate_answers
创建为单独的表。
请帮助我协会。
答案 0 :(得分:1)
让我们看看,那将是:
# 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?
根据您提供的信息,您应该按照自己的意愿行事。 ;)
答案 1 :(得分:0)
这应该做:
candidate_answers.test_question
candidate_answers
表删除test_questions
表
class Test<的ActiveRecord :: Base的 has_many:结果 has_many:问题 端
类结果<的ActiveRecord :: Base的 belongs_to:test belongs_to:候选人 端
候选人等级<的ActiveRecord :: Base的 has_many:结果 has_many:答案 端
class Answer<的ActiveRecord :: Base的 belongs_to:问题 belongs_to:候选人 端
class Question<的ActiveRecord :: Base的 belongs_to:test has_many:答案 端
看起来你打算重复使用不止一个问题的答案,这通常是一个坏主意。在这种情况下更好地克隆一个答案。