RoR - 为什么我保存了重复记录?

时间:2011-11-08 21:34:53

标签: ruby-on-rails ruby activerecord many-to-many duplicates

我通过测验,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

2 个答案:

答案 0 :(得分:0)

您是否在测验模型中使用accepts_nested_attributes_for:quiz_questions?如果是这样,您不必循环测试问题并将每个问题保存在控制器中。试试看,看看它是否解决了你的问题。

答案 1 :(得分:0)

我无法回答这个问题。相反,我将使用弹出窗体添加新问题。

相关问题