【问题标题】:How can I send values of multiple select option fields to a controller如何将多个选择选项字段的值发送到控制器
【发布时间】:2020-04-08 20:35:51
【问题描述】:

我有一个模型“Cell”的表格,可以使用javascript 进行克隆。我有可以克隆的表单中的文本字段和选择字段。由于克隆的元素会生成一个字符串数组,因此我通过使用以下格式更改字段的名称属性将文本元素作为数组发送:cell[ ]['name']。但是,rails 中的f.select 字段带有默认名称属性cell[category_id]。因此,我不断收到错误消息:

Invalid request parameters: expected Hash (got Array) for param `cell'.

这是代码:

= form_for @cell do |f|
  #clone
    .form.rowField
      = f.text_field :name, name: 'cell[][name]', class: "form-control"
      = f.select :category_id, options_for_select(Category.all.pluck('name'))
      i.fas.fa-plus-circle#addrow
    = f.submit "Save", class: "button btn btn-primary"

用于克隆表单的javascript代码是

$('#addrow').click(function () {
        var row = document.querySelector('.rowField');
        var cloneRow = row.cloneNode(true);
        var target = document.querySelector('#clone');
        cloneRow.querySelectorAll('input').forEach(function (input) {
            input.value = "";
        });
        target.appendChild(cloneRow);
    });

有没有办法将选择标签的名称属性从cell[category_id]更改为cell[][category_id]

【问题讨论】:

  • Rails 的表单助手选择有一个multiple: true 选项。这可能会有所帮助。还有你的强参数是什么样的?
  • @Shristina 是模型中的类别和名称字段都是数组吗?另外,如果这些是数组,请在名称文本字段中尝试'cell[name][]',在选择名称字段中尝试'cell[category_id][]',然后尝试。对于选择更新名称,如下所示。 = f.select 'cell[category_id][]'如果这对你有用,我会在回答中发帖。
  • 这里的用户故事是什么?而不仅仅是克隆整个表单?这看起来像是对多重创建操作的一次非常尴尬的尝试。

标签: javascript arrays ruby-on-rails hash ruby-on-rails-6


【解决方案1】:

我通过将选择字段的名称更改为:

= f.select :category_id, options_for_select(Category.all.pluck('name')), {}, {name: 'cell[][category_id]'}

【讨论】:

    猜你喜欢
    • 2020-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-03
    • 2021-05-20
    • 1970-01-01
    相关资源
    最近更新 更多