首页 > 解决方案 > 如何通过将数组值从 HTML 传递到 Rails 控制器来更新

问题描述

我正在尝试从 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检查和更新记录所示?

标签: htmlruby-on-railsrubyparametershaml

解决方案


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

- 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}" }

This works since Rack merges parameters with names ending with [] into an array. Its also how the built in FormOptionsHelper works.


推荐阅读