如何通过将数组值从 HTML 传递到 Rails 控制器来进行更新

How to update by passing array values from HTML to Rails controller

我正在尝试从 html.haml 表单更新记录。

HTML.HAML:

%input{:name => "post[my_card_ids][]", :type => "hidden",value: "#{post["my_card_ids"]}",id: "my_card_ids"}

当我检查 HTML 页面时,值与它们应该的完全一样。

HTML检查:

<input id="my_card_ids" name="post[my_card_ids][]" type="hidden" value="[5d1b83a6616b6523a9020000, 5d1b9893616b653abd0b0000]">

但是当我在控制器中收到相同的参数时,它们会变成这样:

Rails 控制台:

<ActionController::Parameters {"my_card_ids"=>["[\"5d1b83a6616b6523a9020000\", \"5d1b9893616b653abd0b0000\"]"]

记录保存时带有所有额外的括号和引号,我猜是因为它是作为字符串传递的。

如何干净利落地传递数组,如HTML检查和更新记录所示?

您将数组作为字符串放入隐藏字段。

尝试:

%input{:name => "post[my_card_ids]", :type => "hidden",value: "#{post["my_card_ids"].join(','}",id: "my_card_ids"}

并在控制器中

params[:my_card_ids].split(',')

为了在您想要为数组中的每个值创建隐藏输入的参数中创建一个数组:

- post["my_card_ids"].each do |card_id|
  %input{ name: "post[my_card_ids][]", type: "hidden", value: card_id, id: "my_card_ids_#{card_id}" }

这是可行的,因为 Rack 将名称以 [] 结尾的参数合并到一个数组中。这也是内置 FormOptionsHelper 的工作原理。