【问题标题】:multiple records in one form - strong params issue一种形式的多个记录 - 强大的参数问题
【发布时间】:2020-06-22 16:53:30
【问题描述】:

我想用一个表单创建多个记录,但我不确定如何使它与强参数一起工作。我可以让强参数接受哈希数组,但我不确定如何让表单发布,我可以让表单发布带有整数键的哈希,但我不确定如何让强params 接受。

我有一个Question 模型和一个Answer 模型。这是一个questionnaire 页面,它显示了所有Questions,并允许用户为它们创建Answers。

<h1>Questionnaire</h1>
<%= form_with url: questionnaire_path, local: true do |form| %>
  <% @questions.each_with_index do |question| %>
    <%= fields_for "answers[]", question do |af| %>
      <p><%= question.body %></p>
      <% question.options&.each_with_index do |option, index| %>
        <%= af.check_box :options, {multiple: true }, index, nil %>
        <%= af.label :options, option %>
        <%= af.hidden_field :question_id, value: question.id %>
      <% end %>
    <% end %>
  <% end %>
  <p><%= form.submit "Submit Answers" %></p>
<% end %>

我得到如下所示的参数:

"answers"=>{"0"=>{"options"=>["0"]}, "1"=>{"options"=>["0", "2"]}}

所以我尝试使用这个:

  def answer_params
    params.require(:answers).permit(:question_id, options: [])
  end

然后我得到一个错误:

Unpermitted parameters: :1, :2

【问题讨论】:

    标签: ruby-on-rails strong-parameters


    【解决方案1】:

    我不喜欢这个解决方案,但到目前为止我发现的解决方法是更改​​我的fields_for 以包含answers 之外的范围,称为questionnaire:

    <%= fields_for "questionnaire[answers][]", question do |af| %>
    

    那就把answer_params改成这个别扭:

      def answer_params
        params.require(:questionnaire).permit(answers: [:question_id, options: []])[:answers].values
      end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-15
      • 1970-01-01
      • 2014-02-11
      • 2020-05-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多