我在Rails中创建一个测验,我在我的关联上画了一个空白。
我说我有三张桌子,我知道会在那里。
5
这就是我的开始。该网站的功能如下:
用户可以从最多三个类别中选择问题以添加到他们的主动测验(测验)。因此,用户一次只能进行一次测验,因为当他们完成或重新启动新测验时,将重新创建测验表中的条目。
因此,用户has_one测验并测验belongs_to用户。
接下来我假设测验有很多问题,而且问题可以重复使用并且可以包含在许多不同的测验中,是否需要连接表?
如果是这样的话
users
|___id
|___name
quizzes
|___id
|___user_id
questions
|___id
|___question
|___poss_answer_one
|___poss_answer_two
|___poss_answer_three
|___answer
|___test_version
在这种情况下,它需要一个has_many通过。
一旦我完成了这项工作,我就知道如何对这些协会进行建模,我只是因为措辞而混淆了自己。
答案 0 :(得分:1)
您可能需要HABTM关联(请参阅此RailsCasts)
class Quiz < ActiveRecord::Base
has_and_belongs_to_many :questions
end
答案 1 :(得分:0)
有许多有效的方法(我认为)。完成has_many through
建议后,以下内容可行。 (虽然HATBM实现起来肯定更简单,并且对大多数用例也有效)。
class Question < ActiveRecord::Base
belongs_to :category
has_many :quiz_questions
has_many :quizzes, through: :quiz_questions
class QuizQuestion < ActiveRecord::Base
belongs_to :quiz
belongs_to :question
class Quiz < ActiveRecord::Base
belongs_to :user
has_many :quiz_questions, dependent: :destroy
has_many :questions, through: :quiz_questions
您写道:
用户一次只能进行一次测验,因为他们完成时或 重启一个新的,将进入测验表 重新创建。
我会说,即使是这种情况,您仍然需要has_many
关系。您没有在测验表中“重新创建”记录。您将创建一个新记录。作为单独的功能,如果不再需要这些“旧”记录,您可以决定删除属于该特定用户的测验表中的(任何)现有记录。
答案 2 :(得分:0)
用户可以进行零个,一个或多个测验(不只是一个),因此关联应该是has_many
关联,而不仅仅是has_one
关联,以便澄清
user.quiz
user.quizees
quiz.user
虽然用户一次只能进行一次测验,但在用户完成测验后,用户可以进行另一次新的测验。
对于many-to-many
关联,您可以使用has_and_belongs_to_many
(如果您不需要表格中的额外列,quiz_id和question_id除外)或引入联接表