2013-07-10 12 views
11

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.

+3

Dies sollte in der * Dokumentation * sein. Nicht sicher, warum jemand dich abgelehnt hat. – SWoo

Antwort

17

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.

Hoffentlich wird dies anderen mit dem gleichen Problem helfen.

Verwandte Themen