Rails 4 - Verschachteltes Formular mit accept_nested_attributes_for controller setup?
Ich versuche mit @ ein verschachteltes Formular zu erstellform_for
undfields_for
. Nach viel Recherche und Erfolg, arbeite ich nicht mehr an meinem Projekt. Ich versuche nur, einen Railscast neu zu erstellen, um zu sehen, was ich falsch gemacht habe.
Ich versuche, das Beispiel unter @ neu zu erstellehttp: //railscasts.com/episodes/196-nested-model-form-part-, das sollte nicht so schwer sein, da der Code vorhanden ist, aber ich kann keine Fragen aus der Umfrage erstellen. Hier ist mein Code bis jetzt:
rails new surveysays
rails g scaffold survey name:string
rake db:migrate
rails g scaffold question survey_id:integer content:text
rake db:migrate
Ich versuche es in genau der gleichen Reihenfolge des Videos zu machen. Mein Fragemodell:
class Question < ActiveRecord::Base
belongs_to :survey
end
Mein Umfragemodell:
class Survey < ActiveRecord::Base
has_many :questions, dependent: :destroy
accepts_nested_attributes_for :questions
end
Mein Umfrageformular mit verschachtelten Fragenfeldern:
<%= form_for(@survey) do |f| %>
...
<div class="field">
<%= f.label :name %><br>
<%= f.text_field :name %>
</div>
<%= f.fields_for :questions do |builder| %>
<p>
<%= builder.label :content, "Question" %><br/>
<%= builder.text_area :content, :row => 3 %>
</p>
<% end %>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
Meine Umfrage zeigt:
<p id="notice"><%= notice %></p>
<p>
<strong>Name:</strong>
<%= @survey.name %>
</p>
<ol>
<% for question in @survey.questions %>
<li><%=h question.content%></li>
<% end %>
</ol>
<%= link_to 'Edit', edit_survey_path(@survey) %> |
<%= link_to 'Back', surveys_path %>
Und mein SurveysController:
class SurveysController < ApplicationController
...
# GET /surveys/new
def new
@survey = Survey.new
3.times { @survey.questions.build }
end
...
# POST /surveys
# POST /surveys.json
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 :show, status: :created, location: @survey }
else
format.html { render :new }
format.json { render json: @survey.errors, status: :unprocessable_entity }
end
end
end
...
private
# Use callbacks to share common setup or constraints between actions.
def set_survey
@survey = Survey.find(params[:id])
end
# Never trust parameters from the scary internet, only allow the white list through.
def survey_params
params.require(:survey).permit(:name)
end
end
Als bis min 5:34 und das ist, wenn es nicht funktioniert wie im Video gezeigt und die Fragen nicht erstellt, erscheint das Formular mit den 3 Fragen, ich fülle das Formular aus, aber wenn ein Druck auferstelle es werden keine Fragen erstellt:
Loading development environment (Rails 4.1.6) 2.1.3: 001> s = Survey.all Survey Load (3,0 ms) SELECT "surveys". * FROM "surveys" => #]> 2.1.3: 002> q = s [0] .questions Question Load (0,6 ms) SELECT "questions". * FROM "questions" WHERE "questions". "survey_id" =? [["survey_id", 2]] => #
Ich kann keinen Unterschied zwischen meinem Code und dem Beispiel erkennen. Ich habe sogar versucht, einige Änderungen im @ vorzunehmSurveysController
ohne Erfolg:
Inserting question_attributes: [: id,: content] in Erlaubnis der Methode survey_params oder Inserting @ survey.questions.create (survey_params [: questions_attributes]), nachdem survey.save on create method die Frage erstellt hat, aber mit dem Inhalt: nill
n diesem Punkt stecke ich fest. Ich weiß nicht mehr was ich tun soll, was fehlt mir im Controller? Kann mir jemand etwas helfen, danke.