1

我正在深入嵌套的屬性和運行到這個未經許可的屬性錯誤。Rails 4 - 未經許可的參數 - 深度嵌套的屬性形式不保存

登錄:

Started POST "/videos/1/quizzes" 
Processing by QuizzesController#create as HTML 
    Parameters: {"utf8"=>"✓", 
"authenticity_token"=>"XdJ5lPZ7QuVEZiVYbphnV0T/NpMMTKVaL2dcWRxHVQU=", 
"quiz"=>{"name"=>"Test", 
"question"=>{"content"=>"Test", 
"answer"=>{"content"=>"Test"}}}, "commit"=>"Submit", "video_id"=>"1"} 

Video Load (0.1ms) SELECT "videos".* FROM "videos" WHERE "videos"."id" = ? LIMIT 1 [["id", 1]] 

Unpermitted parameters: question 

因此,所有的數據被提交。從周圍閱讀它看起來像嵌套的問題參數應該是「question_attributes」=>但在我的日誌中它只顯示「問題」=>。我不知道這與它有什麼關係?但在這一點上,這真的是我唯一的想法。

競猜#新:

def new 
    @video = Video.find(params[:video_id]) 
    @quiz = @video.build_quiz 
    @quiz.questions.build 
    @quiz.questions.each do |question| 
    question.answers.build 
    end 
end 

的VIDEO_ID params爲工作,因爲你可以在上面看到它被提交。

測驗#創建

def create 
    @video = Video.find(params[:video_id]) 
    @quiz = @video.create_quiz(quiz_params) 
    respond_to do |format| 
    if @quiz.save 
     format.html { redirect_to @quiz, notice: 'quiz was successfully created.' } 
     format.json { render :show, status: :created, location: @quiz } 
    else 
     format.html { render :new } 
     format.json { render json: @quiz.errors, status: :unprocessable_entity } 
    end 
    end 
end 

quizzes_params

def quiz_params 
    params.require(:quiz).permit(:name, questions_attributes: [:id, :content, :quiz_id, answers_attributes: [:id, :content, :question_id]]) 
end 

因此,大家可以看到它的停止問題的參數和被保存答案參數。

讓我知道你是否需要別的東西!預先感謝您的任何幫助!

更新 這裏是部分表格! 我也試過做form_for @quiz do |f|但是這並沒有改變提交的內容。 我試過的其他東西是和:answer作爲:questions:answers,但沒有運氣。

<%= form_for [@video, @quiz] do |f| %> 
    <%= f.label :name, "Title" %> 
    <%= f.text_field :name %> 

    <%= f.fields_for :question do |questions| %> 
     <%= questions.label :content, "Question" %><br> 
     <%= questions.text_area :content, rows: 3 %> 

     <%= questions.fields_for :answer do |answers| %> 
     <%= answers.label :content, "Answer" %> 
     <%= answers.text_field :content %> 
     <% end %> 

    <% end %> 
    <%= f.submit "Submit" %> 

    <% end %> 
+0

您需要從您提交表單的位置檢查視圖中的參數結構。 – 2014-12-02 06:51:44

+1

你的html文件,我認爲你一定是缺少的東西,如f.fields_for被寫爲fields_for,這就是爲什麼你的「question_attributes」已成爲「問題」 – argentum47 2014-12-02 09:28:05

+0

好吧,我添加了部分形式。 – Jacksonvoice 2014-12-02 17:21:22

回答

0

解決方案:

我在quizzes_controller改變這條線從@quiz.questions.build2.times { @quiz.questions.build }和它固定的問題。不確定爲什麼現在可以工作,但確實如此。任何解釋爲什麼會非常感激!

def new 
    @video = Video.find(params[:video_id]) 
    @quiz = @video.build_quiz 
    2.times { @quiz.questions.build } 
    @quiz.questions.each do |question| 
     question.answers.build 
    end 
end