ActiveRecord many_to_many关联混乱

时间:2016-04-22 01:52:26

标签: ruby-on-rails activerecord

我在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通过。

一旦我完成了这项工作,我就知道如何对这些协会进行建模,我只是因为措辞而混淆了自己。

3 个答案:

答案 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

虽然用户一次只能进行一次测验,但在用户完成测验后,用户可以进行另一次新的测验。

  • user1 - &gt; quiz1
  • user1 - &gt; quiz2
  • user1 - &gt; quiz3

对于many-to-many关联,您可以使用has_and_belongs_to_many(如果您不需要表格中的额外列,quiz_id和question_id除外)或引入联接表