There's an echo in my head

日々のメモ。

Railsでオフの状態のcheck_boxの値が送信される仕組み

ActionView::Helpers::FormBuilder#check_boxに書かれている内容。

checkboxのチェックがオフの状態だとブラウザはその値を送信しないため、そのままcheckboxがオフになったことをサーバに伝えることができない。

そこでRailscheck_boxメソッドは

<input name="post[validated]" type="hidden" value="0" />
<input checked="checked" type="checkbox" id="post_validated" name="post[validated]" value="1" />

のようにhiddenのあとに続けてcheckboxを生成する。

ブラウザは上から順次パラメータを送信していき、Railsはそれを順に解釈していく。そのときオフの状態では上にあるhidden側のvalueのみが送信され、オンの状態ではhidden側のvalueは下にあるcheckbox側のvalueによって上書きされて送信される。

うまく回避してるなあ、という感じ。

このブログに出てくるコードスニペッツは、引用あるいは断りがない限りMITライセンスです。