嵌套表单的编辑/更新控制器和表单视图是什么样的?

时间:2014-01-12 16:26:16

标签: ruby-on-rails ruby nested-forms nested-attributes

我认为我的观点结构不正确,但这是我可以让所有表单字段显示的唯一方法。

我正在尝试制作一个有两个嵌套模型的。我知道最佳实践是只有一个嵌套模型,所以我似乎找不到解决这个问题的方法。

我的#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"}

1 个答案:

答案 0 :(得分:0)

我输出了json并意识到模型的结构与我意识到的不同。此外,视图调用相同的字段4次,而不是调用四个不同的字段。