我有一个带有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
未定义,但处理此问题的正确方法是什么?
答案 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或使用 哈希而不是数组。