复选框未以铁轨形式检查

时间:2013-06-12 12:26:16

标签: ruby-on-rails forms checkbox haml

我在form_tag

的一部分中有这个
%input{ :type => "checkbox", :name => "form", :value => "#{@t.form}"}

当我第一次检查它时,它会以1的形式保存到数据库中,但如果我导航回到表单,它就不会显示检查..

1 个答案:

答案 0 :(得分:1)

首先,这不是在rails中添加表单和字段的推荐方法。但是,仍然要回答你的问题,你可以这样做:

%input{ :type => "checkbox", :name => "form", :value => true, :checked => @t.form ? "checked" : ""}

请注意,我已将值部分更改为true,因为它是复选框的值属性,它始终具有相同的值。

现在还有另一个问题,如果先前已选中复选框,现在您取消选中它并保存表单,那么它不会在数据库中保存false的值“0”。

  

根据HTML规范未选中复选框,不提交任何值。但是,复选框始终提交值通常很方便。

现在要避免此问题,您还需要添加一个隐藏字段。

%input{ :type => "hidden", :name => "form", :value => false}
%input{ :type => "checkbox", :name => "form", :value => true, :checked => @t.form ? "checked" : ""}

现在,如果取消选中该复选框,则仅提交隐藏的输入,如果已选中,则两者都已提交,但复选框提交的值优先。

注意:我建议您使用rails方法生成隐藏字段和复选框。

更新(使用form_tag帮助程序)

= hidden_field_tag('form', '0')
= check_box_tag("form", '1', @t.form)

我认为您使用的是HAML,表单是数据库中的布尔字段。