Rails 5:自动保存关联记录,创建父模型的重复记录

时间:2017-04-20 15:42:55

标签: ruby-on-rails activerecord nested-attributes model-associations cocoon-gem

我目前正在学习rails并正在尝试创建一个Survey管理应用程序。该应用程序具有以下模型:

class Survey < ApplicationRecord
  has_many :survey_questions
  has_many :questions, through: : survey_questions
  accepts_nested_attributes_for :questions
end

class SurveyQuestion < ApplicationRecord
  belongs_to :survey
  belongs_to :question
end

class Question < ApplicationRecord
  has_many :survey_questions
  has_many :surveys, through: :survey_questions
end

我希望能够自动关联现有的问题ID,而不是每次创建新的调查时都会创建一个全新的问题列表。

我发现这个解决方案接近我想要的accepts_nested_attributes_for with find_or_create?。它能够正确地关联我的记录,但是在事务结束时它总是会在Question模型中创建一条新记录。

任何人都可以建议为什么会发生这种情况并帮助我指出正确的方向?谢谢!

修改

以下是我的createnewsurvey_params方法的代码:

def new
  @survey = Survey.new
  @questions = Question.all

  unless @question.blank?
    @questions.each do |question|
      @survey.questions.build(name: question)
    end
  end
end

def create
  @survey = Survey.new(survey_params)
  @survey.save!
end

def survey_params
  params.require(:survey).permit(:enddate, questions_params: [:name])
end

以下是我对newquestions_fields的看法,我正在使用cocoon gem来帮助我动态生成它们:

= simple_form_for @survey, url: survey_index_path, method: :post do |f|
  = f.input :finaldate, as: :string

  = f.simple_fields_for :questions do |qn|
    = render 'question_fields', f: qn

  = link_to_add_association 'New Question', f, :questions

的question_fields

= f.input :name
= link_to_remove_association 'Remove Question', f

0 个答案:

没有答案