チェックボックスには2種類ある。
- 未選択状態も送信可能
- 選択状態のみ送信
未選択状態も送信可能タイプの場合、
<%= check_box 'check','box' %>
を利用する。
出力結果。
<input id="search_kind_id" name="check_box" type="checkbox" value="1" />
<input name="check_box" type="hidden" value="0" />
送信結果。
params[:check][:box]
>> "1" # 選択時
params[:check][:box]
>> "0" # 未選択時
注目すべきは hidden 項目の存在。name が同一の hidden 項目が勝手に作成される。
こやつが未選択時に送信されるのかぁ。なるほど~
選択状態のみ送信タイプの場合、
<%= check_box_tag 'check','box' %>
出力結果。
<input id="check_box" name="check_box" type="checkbox" value="1" />
送信結果。
params[:check][:box]
>> "1" # 選択時
params[:check][:box]
>> nil # 未選択時
普通の HTML の動き。
checkbox を複数選択するシチュエーションは少なくない。
checkbox を配列化する場合は、check_box_tag を利用する。(check_box タグも配列化できないわけではないが、しても意味がないため)
<%= check_box_tag 'check','box[]',@model.id %>
出力結果。
<-- value=1,2 を出力した例 -->
<input id="check_box" name="check_box[]" type="checkbox" value="1" />
<input id="search_kind_id" name="check_box[]" type="checkbox" value="2" />
送信結果。
params[:check][:box]
>> ["1","2"] # 複数選択時
params[:check][:box]
>> ["1"] # 1のみ選択時
params[:check][:box]
>> [] # 未選択時
ちなみに、check_box を配列化するには、
<%= check_box 'check','box',{:name=>"check[box][]"},@model.id %>
と、出力する name を無理やり指定してやれば可能。
ただし、出力結果は、
<input id="check_box" name="check[box][]" type="checkbox" value="1" />
<input name="check[box][]" type="hidden" value="0" />
となり、
params[:check][:box]
>> ["1","0"] # 選択時
params[:check][:box]
>> ["0"] # 未選択時
と、常に未選択状態が送信される状況になってしまう。
0 件のコメント:
コメントを投稿