Rails 4 imbriqués les attributs de ne pas épargner

Je ne peux pas sembler obtenir imbriqués les attributs pour enregistrer dans la base de données. Je suis à l'aide de Rails 4.

Voici mes modèles :

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

Ici est le contrôleur:

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

Enfin, ici, c'est la forme elle-même. J'ai essayé d'utiliser à la fois f.fields_for et juste 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 %>

L'enquête enregistre la plus fine à la base de données, mettre les questions et les réponses ne seront pas. J'ai regardé toutes les ressources que j'ai pu trouver et il me semble que je suis en train de faire cela correctement, il est donc vraiment me rend fou.

Cet exemple est juste un petit échafaudage j'ai donc eu un peu de code à coller, mais je n'arrive pas à le faire fonctionner n'importe où ailleurs.

edit:
changer ma nouvelle action à quelque chose comme ceci
:

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

TRAVAILLÉ!

VOIR TEEGS RÉPONSE POUR SOLUTION À CE

Ici est la nouvelle forme, je suis en utilisant seulement d'enregistrer le nom de l'enquête

  <%= 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 %>
Avez-vous essayé d'utiliser build à créer vide relations sur votre new action dans le contrôleur?
J'ai essayé de changer ma nouvelle action: "def @sondage = Enquê[email protected] end", et il n'a toujours pas de travail

OriginalL'auteur Michael | 2014-02-11