我正在实施一个基于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作为数组数组传递和接收的帮助。感谢。
答案 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) }
我们现在传递一个逗号分隔值数组,而不是传递数组数组。在控制器中,这些逗号分隔值将变为数组。