我通过测验,quiz_questions和quiz_questions_links设置了多对多关系。我有一个表单来创建一个测验,并将现有的问题添加到工作中。现在我需要让用户手动添加新问题。但我的表单现在正试图在quiz_questions_links表中插入两个记录,以便输入每个手动问题,我无法弄清楚原因。以下是表单中的示例发布:
Parameters: {
"commit"=>"Create",
"quiz"=>{
"keyword_list"=>"",
"quiz_questions_links_attributes"=>{
"1"=>{ "sequence"=>"1", "quiz_question_id"=>"2" },
"2"=>{ "sequence"=>"2", "quiz_question_id"=>"9" }
},
"quiz_questions_attributes"=>{
"1"=>{
"answers_attributes"=>{
"0"=>{
"content"=>"Manual Question Answer 2"}},
"correct_answer_attributes"=>{
"content"=>"Manual Question Answer 1",
"correct_answer"=>"1"},
"content"=>"Manual Question"}
"opening_blurb"=>"test"
etc...
因此,提交的测验包含quiz_question(这是手动输入的问题)的属性和quiz_questions_links的属性(这是测验附加的现有问题)。希望这是有道理的。我的测验控制器的关键部分如下所示:
if @quiz.save
flash[:notice] = 'Quiz was successfully created.'
redirect_to([:cms, @quiz])
end
这可以正确地创建任何新的quiz_questions及其答案。然后,它会为添加到测验的现有问题和新手动创建的quiz_questions正确插入quiz_questions_links记录。但后来它尝试为手动创建的quiz_questions插入重复记录。我无法弄清楚它为什么插入重复记录。有什么想法吗?
编辑:删除了控制器中不需要的问题循环,添加了下面每个模型的相关部分。
#quiz.rb
has_many :quiz_questions_links, :dependent => :destroy
has_many :quiz_questions, :through => :quiz_questions_links, :uniq => true
accepts_nested_attributes_for :quiz_questions
accepts_nested_attributes_for :quiz_questions_links
#quiz_question.rb
has_many :quiz_questions_links
has_many :quizzes, :through => :quiz_questions_links
#quiz_questions_links.rb
belongs_to :quiz
belongs_to :quiz_question
答案 0 :(得分:0)
您是否在测验模型中使用accepts_nested_attributes_for:quiz_questions?如果是这样,您不必循环测试问题并将每个问题保存在控制器中。试试看,看看它是否解决了你的问题。
答案 1 :(得分:0)
我无法回答这个问题。相反,我将使用弹出窗体添加新问题。