質問: ### 前提・実現したいこと Ruby on Railsのcheck_box_tagでチェックした場合は1を、チェックをしない場合は0を送るコードにしたいです。よろしくお願いいたします。 ### 発生している問題・エラーメッセージ ``` チェックを入れた場合に、 params[:locations][:area1] => ["0", "1"] と0,1の両方が返ってきてしまいます。 ``` ### 該当のソースコード ``` <%= form_tag('/groups', method: :post) do %> <%= hidden_field_tag 'locations[area1][]', 0 %> <%= check_box_tag 'locations[area1][]', 1 %><%= "日本" %> <% end %> ``` ### 補足情報(言語/FW/ツール等のバージョンなど) コードが上から読み込まれて、先に処理をしたhidden_field_tagのparamsが、もしチェックボックスにチェックを入れた場合は0は上書きされて1が入ると考えていたのですが、そうはならないのでしょうか? もしcheck_boxでチェックした時に1,チェックを入れないときに0を送る他の方法がありましたら、教えていただけると幸いです。
回答: パラメーター名が`[]`で終わらない、単体のチェックボックスであれば、「0は上書きされて1が入る」挙動となります。 ただ、`[]`で終わっているということは**複数の値を取る**パラメータ、ということになるので、複数の値があれば配列になってしまいます。そして、HTML上、チェックボックスはチェックされていなければ**値を送信しない**仕様となっています。 対策法は以下の3つです。 * パラメータ名から`[]`を外して、1つの値として送信されるようにする * JavaScriptで、チェックがなければ特定の値を生成するようにしておく(あまりおすすめできません) * Rails側で、値が来ない場合は0とみなすようにハンドリングする