Schienen 4 - Verschachtelte form mit accepts_nested_attributes_for-controller-setup?
Ich versuche, um eine verschachtelte form mit form_for
und fields_for
. Nach viel recherche und Erfolg, nicht auf der Arbeit an meinem Projekt nicht mehr. Ich versuche nur, um wieder ein railscast zu sehen, was habe ich falsch gemacht.
Ich versuche, erstellen Sie das Beispiel gefunden bei http://railscasts.com/episodes/196-nested-model-form-part-1, das sollte nicht so schwer sein, da der code da ist, aber ich kann nicht verwalten, erstellen, Fragen aus der Umfrage. 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 zu tun, in der exakt gleichen Reihenfolge von den Videos.
Meine Frage Modell:
class Question < ActiveRecord::Base
belongs_to :survey
end
Meiner Umfrage Modell:
class Survey < ActiveRecord::Base
has_many :questions, dependent: :destroy
accepts_nested_attributes_for :questions
end
Meiner Umfrage mit verschachtelten Fragen Feldern:
<%= 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 %>
Meiner Umfrage zeigen:
<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 meine 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 in dem video gezeigt und nicht das erstellen der Fragen, die form erscheint mit die 3 Fragen, fülle ich die form, aber wenn eine drücken Sie die Taste es nicht schaffen, die Fragen:
Loading development environment (Rails 4.1.6)
2.1.3 :001 > s = Survey.alle
Umfrage Belastung (3,0 ms) WÄHLEN Sie "Umfragen".* VON "Umfragen"
=> #]>
2.1.3 :002 > q = s[0].Fragen
Frage Load (0,6 ms) WÄHLEN Sie "Fragen".* AUS "Fragen" WO "Fragen"."survey_id" = ? [["survey_id", 2]]
=> #
Ich sehe keinen Unterschied zwischen meinem code und das Beispiel. Ich habe sogar versucht, einige änderungen in der SurveysController
ohne Erfolg:
Einfügen question_attributes:[:id:Inhalt] in der Genehmigung der Methode survey_params
oder
Das einfügen von @ - Umfrage.Fragen.erstellen(survey_params[:questions_attributes]), wenn nach Erhebung.speichern Sie auf create-Methode, so entsteht die Frage, aber mit Inhalt: nill
In diesem Punkt bin ich stecken geblieben. Ich weiß nicht, was mehr, was zu tun ist, was bin ich int den controller?
Kann mir jemand etwas helfen, danke.
InformationsquelleAutor fasantos | 2014-12-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
Auf die
survey_params
Methode im controller, die Ihnen fehlt, die Frage params, sollte es so Aussehen:Lassen Sie mich wissen, wie es geht!
InformationsquelleAutor kurenn
Den survey_params ändern muss, um zu ermöglichen, verschachtelte Attribute aus:
:
questions_attributes: [:id , :content, :_destroy]
möglicherweise eine bessere Passform, wenn die Zerstörung Verbände ist ebenfalls erforderlich.InformationsquelleAutor fasantos