2017-03-09 92 views
0

我被困在一个点badly..when我用导轨做的form_for与远程提交请求:真用含有如下散列阵列的隐藏字段:卡住发送散列与远程真

<%= f.hidden_field :staff_stat_data, :value =>[{a: "a"} , {b: "b"}] %> 

那么我得到散列作为一个字符串参数,如:

"{:a=>\"a\"} {:b=>\"b\"}" 

与此不好。

+0

这是什么问题? –

+0

我有一些哈希数组中的数据在html表单中,我需要将这个数据发送回控制器与远程:true..While提交模式形式的数据在params是作为字符串而不是散列数组。 [{a:“a”},{b:“b”}] =>换成“{:a => \”a \“} {:b => \”b \“}” – Abhishek

回答

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"}] 
+0

!它已经解决了! :) – Abhishek

+0

请记住标记为您的问题的答案。 – MrDanA