我正在尝试在Rails 5中创建一个在线测验系统。
以下是一些模型:
quiz
,question
,quiz_question
,answer
,category
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。
以下是我的问题:
如果需要创建QuizQuestion
模型以建立many-to-many
关联?
我想使用question_ids
列quizzes
来存储测验从类别中的问题表中获得的问题。
但是有很多问题,无法选择所需的问题。如何实现?
答案 0 :(得分:0)
您需要仔细查看Active Record Associations Guide,尤其是has_many :through
relationships上的部分。
您不一定需要QuizQuestion模型,但您可能需要一个。另一种方法是在数据库中创建连接表,并使用has_many :through
关系而不是has_many :through
关系。但是,position
具有一些优势;最重要的是,它允许您向关联模型添加列。在这种情况下,例如,您可能意识到要在QuizQuestion模型上添加has_and_belongs_to_many
字段,以便对测验问题进行特定排序 - 您无法添加该字段使用question_ids
。
您实际上不需要测验模型上的question_count
或has_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."));
最后两个,特别是,你不必在测验模型上拥有这些属性中的任何一个 - 它会自动为你照顾。