3

我有这个在我的一部分form_tag

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

它会像我第一次检查时一样保存到数据库中1,但是如果我导航回表单,它不会显示为选中..

4

1 回答 1

1

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

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

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

现在还有另一个问题,如果之前选中了复选框,现在您取消选中它并保存表单,那么它将不会在数据库中保存 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,并且表单是数据库中的布尔字段。

于 2013-06-12T13:05:20.477 回答