2008年5月20日火曜日

check_box

チェックボックスには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 件のコメント: