Rails 4 geschachtelte Attribute nicht speichern

Ich kann nicht scheinen, um verschachtelte Attribute in der Datenbank speichern. Ich bin mit Schienen 4.

Hier sind meine Modelle :

class Answer < ActiveRecord::Base
  belongs_to :question
end


class Question < ActiveRecord::Base
  has_many :answers
  belongs_to :survey
  accepts_nested_attributes_for :answers, allow_destroy: true
end

class Survey < ActiveRecord::Base
  has_many :questions
  validates_presence_of :name
  accepts_nested_attributes_for :questions
end

Hier ist der controller:

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, :id, :survey_id, 
    answers_attributes:[:content, :id, :questions_id]
    ])
end

Schließlich, hier ist die form selbst. Ich habe versucht, mit beiden f.fields_for und nur fields_for

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

  <%= f.fields_for :question do |builder| %>
     <%= builder.label :content %>
     <%= builder.text_area :content %>

       <%= f.fields_for :answer do |builder| %>
         <%= builder.label :content, "Answer" %>
         <%= builder.text_field :content %>
       <% end %>

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

Die Umfrage speichert Strafe an die Datenbank, legen Sie die Fragen und Antworten nicht. Ich habe jede Ressource, die ich finden konnte, und wie es scheint, ich mache dies richtig, so ist es wirklich mich verrückt.

Diesem Beispiel ist nur ein kurzes Gerüst, so hatte ich einige code einfügen, aber ich kann nicht scheinen, um es zu arbeiten, sonst nirgends.

Bearbeiten:
die änderung meiner neuen Aktion, so etwas wie dieses
:

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

GEARBEITET!

SEHEN TEEGS ANTWORT FÜR DIE LÖSUNG DIESES

Hier ist die neue form, die ich verwende, nur noch speichern den Namen der Umfrage

  <%= f.fields_for :question do |question_builder| %>
  <%= 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>

  <%= f.fields_for :question do |question_builder| %>
   <%= question_builder.label :content %>
   <%= question_builder.text_area :content %>

   <%= question_builder.fields_for :answer do |answer_builder| %> 
       <%= answer_builder.label :content, "Answer" %>
       <%= answer_builder.text_field :content %>
   <% end %>

<% end %>

  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>
Haben Sie versucht, mit build zu erstellen, die leeren Beziehungen, die auf Ihrem new action im controller?
Ich habe versucht, meine neue Aktion: ` def new @Umfrage = Umfrage.neue @Umfrage.Fragen.bauen Ende und es trotzdem nicht funktioniert

InformationsquelleAutor Michael | 2014-02-11

Schreibe einen Kommentar