2016-06-28 9 views
0

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?

Antwort

0

Versuchen Sie, diese

def question_params 
    params.require(:question).permit(:id, :text, answers_attributes: [:id, :text]) 
end 

und für

def update 
    @question = Question.find(params[:id]) 
    if @question.update_attributes(question_params) 
    render :json => @question 
    else 
    not_valid @question 
    end 
end 

EDIT Aktualisierung:

accepts_nested_attributes_for :answers und question_form.fields_for :answers do |answer_form| Verwendung werden die associations_attributes params generieren, die Sie Bereich gesucht haben.

dass question_form erwarten ist smth wie form_for @question do |question_form

+0

'.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

Verwandte Themen