Sono nuovo di Rails e costruito qualcosa sulla base di questo, ma aveva bisogno di aggiornamenti per renderlo compatibile con Rails parametri forti 4 di:parametri non consentito per i modelli a doppio annidati in Rails 4
http://railscasts.com/episodes/196-nested-model-form-part-1
ho whitelist i parametri per l'indagine, domande e risposte sulla base di un post simile qui:
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
Il primo modello nidificato (Domanda) funziona, ma il secondo (risposta) restituisce un errore quando presento il modulo per il sondaggio principale:
parametri non consentito: 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
ho controllato il database e l'isn di dati ci sono, e ho trovato l'errore nel registro. Il primo set di dati annidati (le domande) sono lì e funzionano, è solo il secondo successivo che non lo è. Ho anche il: id in là che la gente dice che ne hai bisogno anche tu.
Per quanto ne so, ogni genitore ha bisogno di autorizzare l'attributo annidato diretto che modificherà. Ho usato esattamente lo stesso codice per far funzionare le domande, ma le risposte non sono state autorizzate anche se l'ho fatto nelle domande.
Qualsiasi suggerimento apprezzato. Non riesco a trovare esempi a doppio nidificato da guardare.
AGGIORNAMENTO: Ho risolto il problema per tentativi ed errori.
Ho scoperto che la whitelist deve corrispondere all'annidamento degli attributi. Quindi, per risolvere quanto sopra ho cambiato questo:
class SurveysController < ApplicationController
def survey_params
params.require(:survey).permit(:name, questions_attributes: [:id, :survey_id, :content])
end
a questo:
class SurveysController < ApplicationController
def survey_params
params.require(:survey).permit(:name, questions_attributes: [:id, :survey_id, :content, answers_attributes: [:id, :question_id, :content]])
end
Ad es copia semplicemente la whitelist degli answer_attributes e inseriscila all'interno prima della chiusura "]" per le domande_attributi.
Questo dovrebbe essere nella * documentazione *. Non sono sicuro del motivo per cui qualcuno ti ha downvoted. – SWoo