Jestem nowy w Rails i zbudowany coś na podstawie tego, ale to potrzebne małe aktualizacje, aby był kompatybilny z szyn 4 za mocne parametry:niedozwolonej parametry dwukrotnie zagnieżdżonych modeli w szynach 4
http://railscasts.com/episodes/196-nested-model-form-part-1
i whitelisted parametry badania, pytania i odpowiedzi oparte na podobnym stanowisku tutaj:
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
Pierwszy zagnieżdżonych modelu (pytanie) działa, ale drugi (Answer) zwraca błąd, kiedy złożyć główny formularz ankiety:
niedozwolona Parametry: 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
Sprawdziłem bazę danych i ISN danych tam i znalazł błąd w dzienniku. Pierwszy zestaw zagnieżdżonych danych (pytania) jest tam i działa, to dopiero drugi następny, który nie jest. Mam również: id tam, że ludzie mówią, że potrzebujesz też.
O ile mi wiadomo, każdy rodzic musi dodać do białej listy atrybut zagnieżdżony, który zostanie zmodyfikowany. Użyłem dokładnie tego samego kodu, aby zadawać pytania, ale odpowiedzi nie są umieszczane na białej liście, mimo że zrobiłem to w pytaniach.
Wszelkie wskazówki są mile widziane. Nie mogę znaleźć żadnych podwójnie zagnieżdżonych przykładów do obejrzenia.
AKTUALIZACJA: Naprawiono problem metodą prób i błędów.
Dowiedziałem się, że biała lista musi pasować do zagnieżdżenia atrybutów. Tak aby rozwiązać powyższe zmieniłem to:
class SurveysController < ApplicationController
def survey_params
params.require(:survey).permit(:name, questions_attributes: [:id, :survey_id, :content])
end
do tego:
class SurveysController < ApplicationController
def survey_params
params.require(:survey).permit(:name, questions_attributes: [:id, :survey_id, :content, answers_attributes: [:id, :question_id, :content]])
end
Np po prostu skopiuj białą listę atrybutów odpowiedzi i umieść ją wewnątrz przed zamknięciem "]" dla atrybutów pytania.
Powinno to być w * dokumentacji *. Nie wiem, dlaczego ktoś cię zawiódł. – SWoo