如何在一个轨道中处理多个模型?

我有以下型号

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帮助程序,则可以根据需要处理fields_for

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

一段时间后我也写了一个关于这个问题的答案 。

 #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 %> 

您可以使用相同类型的模型获得最佳解释

http://railscasts.com/episodes/196-nested-model-form-part-1

 #app/models/survey.rb class Survey < ActiveRecord::Base has_many :sections, :dependent => :destroy accepts_nested_attributes_for :sections, :allow_destroy => true end #app/models/section.rb class Section < ActiveRecord::Base belongs_to :survey has_many :questions, :dependent => :destroy accepts_nested_attributes_for :questions, :allow_destroy => true end #app/models/question.rb class Question < ActiveRecord::Base belongs_to :section has_many :answers end 

现在在控制器中

 def new @survey = Survey.new section = @survey.sections.build section.questions.build end end 

现在在视图中

 <%= form_for @survey do |f| %> <%= f.error_messages %> 

<%= f.label :name %>
<%= f.text_field :name %>

<%= f.fields_for :sections do |builder| %> <%= builder.text_field :title %> <%= builder.fields_for :questions do |question| %> <%= question.text_field :content%> <% end %> <% end %>

<%= f.submit "Submit" %>

<% end %>