Arbeit habe ich eine Frage Modell und Antwort-Modell:Rails verschachtelte params nicht richtig
class Question < ActiveRecord::Base
has_many :answers
accepts_nested_attributes_for :answers
end
Hier sind die params ich bin für die #update Aufruf QuestionsController
Senden:
{"id"=>"1", "text"=>"Hello world?",
"answers"=>[{"id"=>1, "text"=>"Answer 4", "question_id"=>1]}
Ziemlich einfach . Die Update-Methode:
def update
@question = Question.find(params[:id])
if @question.update(q_params)
render :json => @question
else
not_valid @question
end
end
Jetzt ist hier der Teil, den ich kämpfen bin auf tragische Weise mit: Ich möchte diese params auf die weiße Liste setzen. Ich kann die Parameternamen nicht steuern, daher kann ich answers
nicht zu answers_attributes
umbenennen. Das einzige, was ich an die Arbeit gefunden haben, die ein wenig lächerlich ist, ist dies:
def q_params
p = ActiveSupport::HashWithIndifferentAccess.new(params)
p[:answers_attributes] = p.delete :answers
end
ich dies der richtige Weg, wirklich tun wollen, mit nur permit
. Hier ist eine Kombination von Linien, die ich versucht habe, von denen keiner funktioniert:
params.permit(:text, {:answers_attributes => [:text]})
# or
permitted = [:text, answers_attributes: [:id, :text]]
params.permit(*permitted)
# or
params.permit(:text, {:answers => [:text]})
Irgendwelche Ideen?
'.require (: Frage)' Ich habe nicht eine param Frage kommen in den params in der Frage, die ich bin Entsendung oben und sie sind. sind nicht veränderbar. Das ist der ganze Zweck für diese Frage. – Snowman