我被困在某个地方......当我使用Rails form_for提交请求时使用remote:true,隐藏字段包含哈希数组,如下所示:
<%= f.hidden_field :staff_stat_data, :value =>[{a: "a"} , {b: "b"}] %>
然后我在参数中获取哈希作为字符串:
"{:a=>\"a\"} {:b=>\"b\"}"
非常坚持这一点。
答案 0 :(得分:1)
你没有得到一个哈希,你得到一个看起来像哈希的字符串。
请记住,每个参数只是一个字符串,即数据在客户端和服务器之间传递的方式。 Rails有时可以接收一个数组,但只有当参数名称描述一个数组时(例如"user_favourites[]"
)。
如果要传递表示数组或散列的单个字符串,可以使用JSON编码/解析数据。
在您的视图中,首先将数组更改为其JSON表示形式,如下所示:
<%= f.hidden_field :staff_stat_data, :value => [{a: "a"} , {b: "b"}].to_json %>
然后在您的控制器中,通过解析JSON,将其更改为哈希:
staff_stat_data = JSON.parse(params[:staff_stat_data])
这会返回一个数组,其中每个元素都是一个哈希值,就像你想要的那样。
您可以在Rails控制台中轻松尝试。
json = [{a: "a"} , {b: "b"}].to_json # => "[{\"a\":\"a\"},{\"b\":\"b\"}]"
JSON.parse(json) # => [{a: "a"} , {b: "b"}]