Rails有很多对很多id

时间:2017-10-15 13:20:03

标签: ruby-on-rails

我正在尝试在Rails 5中创建一个在线测验系统。

以下是一些模型:

quizquestionquiz_questionanswercategory

questions (:title, :category_id, type_id)

answers (:title, :is_right )

quizzes (:title, :category_id, question_count, question_ids)

协会是:

class Quiz < ApplicationRecord
  has_many :questions, :through => :quiz_questions
  belongs_to :category
end




class QuizQuestion < ApplicationRecord
  belongs_to :quiz
  belongs_to :question
end



class Question < ApplicationRecord
  has_many :answers, inverse_of: :question, :dependent => :destroy
  accepts_nested_attributes_for :answers, allow_destroy: true, reject_if: :all_blank

  belongs_to :category
  belongs_to :type
  has_many :quizzes, :through => :quiz_questions
end

当生成新的测验时,我们会按问题类别收集问题集。

问题的数量可能是所有类别,或者只是其中的一部分,例如100或200。

以下是我的问题:

  1. 如果需要创建QuizQuestion模型以建立many-to-many关联?

  2. 我想使用question_idsquizzes来存储测验从类别中的问题表中获得的问题。 但是有很多问题,无法选择所需的问题。如何实现?

1 个答案:

答案 0 :(得分:0)

您需要仔细查看Active Record Associations Guide,尤其是has_many :through relationships上的部分。

  1. 您不一定需要QuizQuestion模型,但您可能需要一个。另一种方法是在数据库中创建连接表,并使用has_many :through关系而不是has_many :through关系。但是,position具有一些优势;最重要的是,它允许您向关联模型添加列。在这种情况下,例如,您可能意识到要在QuizQuestion模型上添加has_and_belongs_to_many字段,以便对测验问题进行特定排序 - 您无法添加该字段使用question_ids

  2. 您实际上不需要测验模型上的question_counthas_many :through属性。您的quiz.questions << a_question # add a question to the quiz quiz.questions -= a_question # remove a question from the quiz quiz.questions.count quiz.questions.ids 关系允许您执行以下操作:

    String time = new SimpleDateFormat("hh:mm aaa").format(calendar.getTime());
    System.out.println(time.toUpperCase().replaceAll("AM.", "A.M.").replaceAll("PM.", "P.M."));
    

    最后两个,特别是,你不必在测验模型上拥有这些属性中的任何一个 - 它会自动为你照顾。