ruby-on-rails – 如何在一个轨道形式中处理多个模型?

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – 如何在一个轨道形式中处理多个模型?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有以下型号
class Survey < ActiveRecord::Base
  has_many :survey_sections
  accepts_nested_attributes_for :survey_sections
end

class SurveySection < ActiveRecord::Base
  belongs_to :survey
  has_many :questions
  accepts_nested_attributes_for :questions
end

class Question < ActiveRecord::Base
  belongs_to :survey_section
  has_many :answers
  belongs_to :question_group
  accepts_nested_attributes_for :question_group
  accepts_nested_attributes_for :answers
end

class Answer < ActiveRecord::Base
  belongs_to :question
end

class QuestionGroup < ActiveRecord::Base
  has_many :questions
end

我的控制器:

def new
    @survey = Survey.new
    survey_section = @survey.survey_sections.build
    survey_section.questions.build
  end

 def create
    @survey = Survey.new(survey_params)
    if @survey.save
      redirect_to @survey,notice: 'Super'
    else
      render 'new'
    end
  end

 def survey_params
      params.require(:survey).permit(:title,:description,survey_sections_attributes:[:id,:title,questions_attributes:[:id,:text,answers_attributes:[:id,:text]]])
    end

如何在3个以上的模型中保存数据?
目前,我可以将调查表格数据保存到调查,调查部分和问题模型中.但我不知道在控制器中我可以将数据保存到其他模型中.

解决方法

如果正确使用 fields_for帮助程序,则可以根据需要处理任意数量的表单.

这就是你认为(你的控制器似乎没问题).

我还有wrote an answer about this回来了.

#app/models/survey.rb
class Survey < ActiveRecord::Base
    has_many :sections
    accepts_nested_attributes_for :sections
end

#app/models/section.rb
class Section < ActiveRecord::Base
    belongs_to :survey
    has_many :questions
    accepts_nested_attributes_for :questions
end

#app/models/question.rb
class Question < ActiveRecord::Base
    belongs_to :section
    has_many :answers
end

尽量保持您的模型名称尽可能简洁.

#app/controllers/surveys_controller.rb
class SurveysController < ApplicationController
   def new
      @survey = Survey.new
      @survey.sections.build.questions.build
   end

   def create
      @survey = Survey.new survey_params
      @survey.save
   end

   private 

   def survey_params
      params.require(:survey).permit(:title,sections_attributes: [:title,questions_attributes:[:title]])
   end
end

#app/views/surveys/new.html.erb
<%= form_for @survey do |f| %>
   <%= f.text_field :title %>
   <%= f.fields_for :sections do |section| %>
       <%= section.text_field :title %>
       <%= section.fields_for :questions do |question| %>
           <%= question.text_field :title %>
       <% end %>
   <% end %> 
   <%= f.submit %>
<% end %>

猜你在找的Ruby相关文章