轨道4 - 嵌套模型(2级)不节能(Rails 4 - Nested models(2 level

2019-10-19 04:58发布

在嵌套模式noob问题。

我使用的轨道4,并试图建立嵌套模型如下:

调查,有许多问题每个问题有很多答案

我下面的Rails强制类型转换情节#196建立在同一形式的调查,问题和答案。 Surevey和Realted问题得到保存,但答案没有得到保存到数据库中。(答案领域然而正在显示的权利。)

我真的很感谢你对这个投入。

谢谢,迈克

surveys_controller.rb

def index
   @surveys = Survey.all
end

def new
  @survey = Survey.new
  3.times do
    question = @survey.questions.build
    1.times { question.answers.build }
  end
end

def create
  @survey = Survey.new(survey_params)

  respond_to do |format|
    if @survey.save
      format.html { redirect_to @survey, notice: 'Survey was successfully created.' }
      format.json { render action: 'show', status: :created, location: @survey }
    else
      format.html { render action: 'new' }
      format.json { render json: @survey.errors, status: :unprocessable_entity }
    end
  end
end

def survey_params
  params.require(:survey).permit(:name,questions_attributes:[:content,answer_attributes:[:content]])
end

new.html.erb

<h1>New survey</h1>
  <%= render 'form' %>
<%= link_to 'Back', surveys_path %>

_form.html.erb:

<%= form_for(@survey) do |f| %>
   <% if @survey.errors.any? %>
      <div id="error_explanation">
          <h2><%= pluralize(@survey.errors.count, "error") %> prohibited this survey from being saved:</h2>
          <ul>
          <% @survey.errors.full_messages.each do |msg| %>
          <li><%= msg %></li>
          <% end %>
          </ul>
          </div>
   <%end%>

   <div class="field">
     <%= f.label :name %><br>
     <%= f.text_field :name %>
   </div>

   <!--Display Questions -->
   <%= f.fields_for :questions do |builder| %>
     <%= render 'question_fields', :f => builder%>
   <% end %>

   <div class="actions">
     <%= f.submit %>
   </div>

<% end %>

_questions_fields.html.erb:

<p>
 <%= f.label :content, "Question" %><br />
 <%= f.text_area :content, :rows => 3 %>
</p>

<!--Display Answers -->
<%=f.fields_for :answers do |builder| %>
   <p>
     <%= render 'answer_fields', :f => builder%>
   </p>
<%end%>

_answers_fields.html.erb:

<p>
 <%= f.label :content, "Answer" %>
 <%= f.text_field :content%>
</p>

调查型号:

 class Survey < ActiveRecord::Base
  has_many :questions, :dependent => :destroy
  accepts_nested_attributes_for :questions
 end

问模型:

  class Question < ActiveRecord::Base
   belongs_to :survey
   has_many :answers, :dependent => :destroy
   accepts_nested_attributes_for :answers
  end

答型号:

  class Answer < ActiveRecord::Base
  belongs_to :question
  end

Answer 1:

编辑:尝试改变answer_attributesanswers_attributessurvey_params方法。

撬会显示你的答案属性没有打通。


咋一看后通过我看不出有什么特别的错,所以你只需要调试。 您应该添加gem 'pry-rails'你的Gemfile,然后把

require 'pry'; binding.pry

你想上哪儿调试线。 我把它的权利在你的行动创造了保存在调查控制器之前。 然后提交表单,然后转到你的服务器。 它会停下来,你将有一个控制台。 类型

@survey.save
@survey.errors

看看会发生什么吧。 还可以键入paramssurvey_params ,以确保您的表单数据都是通过正常去。

如果你一直在不同的地方窥视你会找出不工作。 我怀疑你的答案没有被拉到survey_params正常。 当没有得到保存的东西强的属性往往是罪魁祸首。



文章来源: Rails 4 - Nested models(2 levels) not saving