从表单传递数组数组

时间:2012-01-04 10:44:04

标签: ruby-on-rails ruby

我正在实施一个基于Ryan Bate [总是优秀的] Railscast,#52,通过复选框更新,http://railscasts.com/episodes/52-update-through-checkboxes

的表单

在我的情况下,我实际上想要为所选的每个复选框传递一组id。

我的表单中的关键行看起来像这样,

<td"><%= check_box_tag "sales_ids[]", batch["sales_ids"] %></td>

batch [“sales_ids]本身就是一个id数组,我想要的结果是所有被检查项目的数组(每个项目代表一个id数组)要传递。

如果我从表单中检查个人批次[“sales_ids”],那么我可以确认它确实是一个数组,例如,[3907,3908,3909](记住,我想要为每行检查传递这些项目的数组)

处理表单的方法的关键行如下所示,

params[:sales_ids].each { |batch| Sales.update_all(["code=?", 99], :id => batch) }

此代码的目的,再次基于Railscast示例,是迭代数组数组,并更新每个子数组。

当我检查收到的数组时,我看到,[“5412”,“3907 3908 3909”,“2452”]

子数组不作为数组处理(并且由于我不理解的原因)只更新每个'substring'的第一项(在本例中为“5412”,“3907”,“2452”)

似乎传递的子阵列实际上不是数组,或者其他东西是错误的。

我很感激有关如何将这些ID作为数组数组传递和接收的帮助。感谢。

1 个答案:

答案 0 :(得分:0)

据我所知,以这种方式传递数组不会通过表单工作。然而,有一个解决方案应该适合你。

视图中的

为您的复选框执行此操作:(我假设batch [“sales_ids”]是一个数组)

<%= check_box_tag "sales_ids[]", batch["sales_ids"].join(",") %>

在您的控制器中执行此操作:

params[:sales_ids].collect{|a| a.split(",") }.each { |batch| Sales.update_all(["code=?", 99], :id => batch) }

我们现在传递一个逗号分隔值数组,而不是传递数组数组。在控制器中,这些逗号分隔值将变为数组。