2015-08-29 6 views
7

Ich habe ein Problem, wenn ich versuche, ein Modell mit mehreren Ebenen von accresents_nested_attribetus_for zu speichern.Rails 4 Strong Parameter bei Multiple-Level accresents_nested_attributes_for

Mein Anwendungsfall ist, dass es eine Benutzerseite gibt, auf der der Benutzer mehrere Fragen und auch mehrere Antworten pro Frage erstellen kann.

Was ist passiert, dass, da es auf der einreichen Seite mehrere Fragen sein, die Parameter Hash für den Benutzer, auf einreichen, wie folgt aussieht:

{"user"=>{"questions_attributes"=>{"0"=>{"desc"=>"question", "answers_attributes"=>{"0"=>{"ans"=>""}}}}}} 

Und als solche, die Fehler, die ich bekommen habe ist " Nicht erlaubter Parameter: 0 ". Wie würde ich die Berechtigungen für starke Parameter korrekt einrichten, damit ich alle Modelle korrekt speichern kann? Ich kann durch die Fragen radeln und jeden einzelnen retten, und das funktioniert, aber ich hatte gehofft, dass es einen saubereren Weg geben würde.

user.rb

has_many :questions 
accepts_nested_attributes_for :questions 

question.rb

belongs_to :user 
has_many :answers 
accepts_nested_attributes_for :answers 

answer.rb

belongs_to :question 

users_controller.rb

def update 
    user = User.find_by_id params[:id] 
    user.questions.create question_params(params[:user]) 
end 

def question_params(params) 
    params.require(:question_attributes).permit(:desc, {:answers_attributes => [:ans]} 
end 

Antwort

1

Versuchen Sie diese

def update 
    user = User.find_by_id params[:id] 
    user.update(user_params) 
end 

def user_params 
    params.require(:user).permit(:desc, :questions_attributes => [:question, answers_attributes => [:ans]]) 
end 
+0

Es funktioniert nicht. Immer das **: ans ** -Attribut als ** Unberechtigt ** sagen – Sachin

+1

Hat jemand einen Weg gefunden, es zum Laufen zu bringen? Ich habe das gleiche Problem auf Rails 5 – lkartono