3

私はこれを私の一部に持っていますform_tag

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

初めてチェックしたときと同じようにデータベースに保存されます1が、フォームに戻ってもチェックされていません..

4

1 に答える 1

1

まず、これはレールにフォームとフィールドを追加するための推奨される方法ではありません。しかし、それでもあなたの質問に答えるために、これで行くことができます:

%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 を使用していると思いますが、フォームはデータベースのブール フィールドです。

于 2013-06-12T13:05:20.477 に答える