Ich bin neu in Rails und baut auf diese etwas basiert, aber es brauchte kleine Updates, um es mit Rails 4 starke Parameter kompatibel zu machen:Unzulässige Parameter für doppelt verschachtelten Modelle in Rails 4
http://railscasts.com/episodes/196-nested-model-form-part-1
I der weißen Liste der Parameter für die Befragung, Fragen und Antworten basieren auf einem ähnlichen Beitrag hier:
Rails 4 Nested Attributes Unpermitted Parameters
class Survey < ActiveRecord::Base
has_many :questions, :dependent => :destroy
accepts_nested_attributes_for :questions, allow_destroy: true
end
class Question < ActiveRecord::Base
belongs_to :survey
has_many :answers, :dependent => :destroy
accepts_nested_attributes_for :answers, allow_destroy: true
end
class Answer < ActiveRecord::Base
belongs_to :question
end
class SurveysController < ApplicationController
def survey_params
params.require(:survey).permit(:name, questions_attributes: [:id, :survey_id, :content])
end
class QuestionsController < ApplicationController
def question_params
params.require(:question).permit(:survey_id, :content, answers_attributes: [:id, :question_id, :content])
end
class AnswersController < ApplicationController
def answer_params
params.require(:answer).permit(:question_id, :content)
end
Die erste verschachtelte Modell (Frage) funktioniert, aber die zweite (Antwort) gibt einen Fehler zurück, wenn ich senden Sie die wichtigsten Umfrageformular:
Unzulässige Parameter: answers_attributes
Started POST "/surveys" for 127.0.0.1 at 2013-07-10 19:20:00 +0800
Processing by SurveysController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"pCK7j73kJPmld6gMXtbnBcheHU3pb9FGdjbHJPX6leE=", "survey"=>{"name"=>"test", "questions_attributes"=>{"0"=>{"content"=>"bbb", "answers_attributes"=>{"0"=>{"content"=>"bbbb"}}}}}, "commit"=>"Create Survey"}
Unpermitted parameters: answers_attributes
ich die Datenbank und die Daten isn geprüft Ist da und hat den Fehler im Log gefunden. Der erste Satz verschachtelter Daten (die Fragen) ist da und funktioniert, es ist nur der zweite, der nicht ist. Ich habe auch die: ID drin, die Leute sagen, du brauchst auch.
Soweit ich weiß, muss jeder Elternteil das direkt verschachtelte Attribut, das geändert wird, auf die weiße Liste setzen. Ich habe genau den gleichen Code verwendet, um Fragen zur Arbeit zu bringen, aber die Antworten werden nicht auf die weiße Liste gesetzt, obwohl ich das in Fragen getan habe.
Alle Hinweise geschätzt. Ich kann keine doppelt verschachtelten Beispiele finden.
UPDATE: Ich habe das Problem durch Versuch und Irrtum behoben.
Ich habe herausgefunden, dass die Whitelist der Verschachtelung von Attributen entsprechen muss. So beheben die oben ich dies geändert:
class SurveysController < ApplicationController
def survey_params
params.require(:survey).permit(:name, questions_attributes: [:id, :survey_id, :content])
end
dazu:
class SurveysController < ApplicationController
def survey_params
params.require(:survey).permit(:name, questions_attributes: [:id, :survey_id, :content, answers_attributes: [:id, :question_id, :content]])
end
Z.B. Kopieren Sie einfach die Whitelist der Antworten_Attribute und fügen Sie sie vor dem abschließenden "]" für die Fragen_Attribute ein.
Dies sollte in der * Dokumentation * sein. Nicht sicher, warum jemand dich abgelehnt hat. – SWoo