我认为我的观点结构不正确,但这是我可以让所有表单字段显示的唯一方法。
我正在尝试制作一个有两个嵌套模型的。我知道最佳实践是只有一个嵌套模型,所以我似乎找不到解决这个问题的方法。
我的#edit页面只传递双嵌套字段的单个参数。因此,#update命令未正确更新模型。
查看
## edit.html.erb
<%= form_for :question, url: scenario_question_path(), method: :patch do |f| %>
{{ ...error & non-nested inputs }}
<ol>
<% @question.answers.each do |fa| %>
<%= f.fields_for :answers, fa do |ff| %>
<li>
<%= ff.text_field :answeroption %>
</li>
<% end %>
<% end %>
</ol>
{{ submit }}
控制器
## questions_controller.rb
def update
@scenario = Scenario.find(params[:scenario_id])
@question = @scenario.questions.find(params[:id])
if @question.update(params[:question].permit(:questionprompt, :text, answers: [:answeroption]))
redirect_to scenario_question_path
else
render 'edit'
end
end
def edit
@scenario = Scenario.find(params[:scenario_id])
@question = @scenario.questions.find(params[:id])
@questions = @scenario.questions.all
@answers = @question.answers.all
end
提交编辑时传递的参数。问题是“答案”实际上有多个已更改的字段,但只显示第一个字段。
{"utf 8"=>"✓",
"_method"=>"patch",
"authenticity_token"=>"nvydgO4oxCo58y4gmRAJ5P8Kc+kmbqWGoQ0IjIuzYiQ=",
"question"=>{"media"=>"test.jpg",
"questionprompt"=>"123123123",
"answers"=>{"answeroption"=>"2344634"}},
"commit"=>"Save Question",
"scenario_id"=>"1",
"id"=>"1"}
答案 0 :(得分:0)
我输出了json并意识到模型的结构与我意识到的不同。此外,视图调用相同的字段4次,而不是调用四个不同的字段。