【发布时间】:2014-12-02 06:40:24
【问题描述】:
我正在处理深度嵌套的属性并遇到此未经允许的属性错误。
日志:
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”=> 但在我的日志中它只显示“question”=>。不知道跟这个有没有关系?但在这一点上,这真的是我唯一的想法。
测验#新:
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 参数正在工作,正如您在上面看到的那样,它正在被提交。
测验#创建
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|,但这并没有改变提交的内容。
我尝试的另一件事是将:question 和: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 %>
【问题讨论】:
-
您需要从提交表单的位置检查视图上的参数结构。
-
请你的html文件,我想你一定是遗漏了一些东西,比如f.fields_for被写成fields_for,这就是为什么你的“question_attributes”变成了“question”
-
好的,我添加了部分表单。
-
OP 值得一枚奖牌,因为它在现实生活中展示了如何允许具有强参数的深度嵌套属性。 SO、Rails 文档和 GitHub 上的示例都是关于嵌套到另一个对象的属性的。没有人谈论将三个嵌套在一起。我已经挠头好几个小时了!
标签: ruby-on-rails ruby-on-rails-4 nested-forms strong-parameters