rails check_box在布尔属性上失败

时间:2011-06-15 20:06:31

标签: ruby-on-rails

我有一个带有bool字段:on_farm_tour的postgres数据库。但我在视图中得到了这个:

undefined method `to_i' for #<Class:0x10ddec5c0>
Extracted source (around line #10):

7: 
8: %p
9:   =f.label :on_farm_tour, "This farm is in the Farm Tour?"
10:   =f.check_box :on_farm_tour
11: 
12: %p
13:   =f.label :last_mile_directions, 'Enter driving directions from the last point displayed by Google Maps for this farm to the actual location of the farm'

显然我知道true.to_i未定义,但处理此问题的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

这似乎是一个问题。请尝试使用check_box_tag。看看apidock.com对它的评价:

  

疑难杂症

     

HTML规范说未经检查   复选框不成功,并且   因此,Web浏览器不会发送它们。   不幸的是,这引入了   问题:如果发票模型有付款   标志,并以编辑的形式   付费发票,用户取消选中它   复选框,没有发送付费参数。   所以,任何像

这样的质量分配习语
@invoice.update_attributes(params[:invoice])
     

不会更新旗帜。

     

为了防止这种情况,助手会生成   之前的辅助隐藏场   非常复选框。隐藏的领域有   相同的名称及其属性模仿   一个未选中的复选框。

     

这样,客户端只发送   隐藏的领域(代表   复选框未选中)或两者   领域。自HTML规范   说必须发送键/值对   他们出现在同一个顺序中   形式和参数提取得到   任何重复的最后一次出现   查询字符串中的键,有效   对于普通形式。

     

不幸的是,解决方法没有   当复选框进入时,工作   类似于数组的参数,如

<%= fields_for "project[invoice_attributes][]",
     

invoice,:index =&gt;零|形式| %GT;         &lt;%= form.check_box:付费%&gt;         ...       &lt;%end%&gt;

     

因为参数名称重复是   正是Rails所追求的目标   区分数组的元素。   对于带有选中复选框的每个项目   你得到一个额外的鬼项目   该属性,分配为“0”。

     

在这种情况下,最好是   使用check_box_tag或使用   哈希而不是数组。