Ruby審議

Rubyに限らず色んなこと

【Rails】チェックボックスがオフ状態でも値を送信する方法

チェックボックスでbooleanを送るときにチェックBOXがオフ状態でもパラメータを送信するようにする必要がある話です。

はじめに

仕組みとしては value=0 のhiddenのinputを作成してデフォルトで送信するようにします。 もし、チェックされなければ、hiddenの値が送信されてチェックされた場合は2行目のinputが上書きます。

<input name="hoge[fuga]" type="hidden" value="0" />
<input class="custom-checkbox" type="checkbox" value="1" name="hoge[fuga]" />

解決策

実はRailsのフォームビルダーを使えばよしなにやってくれるのですが、ちょっと余計なことをして手間取りました。

Good

= f.check_box :fuga, { class:"custom-checkbox" }

<input name="hoge[fuga]" type="hidden" value="0" />
<input class="custom-checkbox" type="checkbox" value="1" name="hoge[fuga]" />

Bad

= f.check_box :opened, { class:"custom-checkbox }, true, false

これだとだめですね

<input class="custom-checkbox" type="checkbox" value="1" name="hoge[fuga]" />
= f.check_box :fuga, { class:"custom-checkbox" }

valueを渡す場合は文字列にしないと

= f.check_box :fuga, { class:"custom-checkbox }, "true", "false"

参考

ActionView::Helpers::FormBuilder

便利!