RoR - почему я получаю дубликаты записей? - PullRequest
0 голосов
/ 09 ноября 2011

У меня установлено отношение многие ко многим с помощью викторин, 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_links для существующих вопросов, добавленных в тест, и новых созданных вручную quiz_questions. Но затем он пытается вставить дубликаты записей для созданных вручную запросов 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 голосов
/ 10 ноября 2011

Мне не удалось получить ответ на этот вопрос. Вместо этого я буду использовать всплывающую форму для добавления нового вопроса.

0 голосов
/ 09 ноября 2011

Используете ли вы accepts_nested_attributes_for: quiz_questions в своей модели викторины?Вам не нужно перебирать вопросы теста и сохранять каждый из них в контроллере, если это так.Попробуйте и посмотрите, решит ли это вашу проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...