У меня установлено отношение многие ко многим с помощью викторин, 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