2011年3月22日火曜日

Rails チェックボックスの配列化(修正)

昔、こんな記事を書いたが、
こんな配列化は意味がないことに気づいたので加筆。

check_box_tag

以下のように記述すると、
<%= check_box_tag "print" %>印刷する
生成される HTML は
<input id="print" name="print" type="checkbox" value="1" />印刷する
となる。
submit した際の parameter 値は
選択時 => "print"=>"1"
非選択時 => "print"=>nil
となる。
ruby では false と nil は false 扱いとなるため、単純に if で params[:print] と判定すれば
ON, OFF の判定ができるため、簡単に記述できる。

check_box

以下のように記述すると、
<%= check_box "print", "enabled" %>印刷する
生成される HTML は
<input name="print[enabled]" type="hidden" value="0" /><input id="print_enabled" name="print[enabled]" type="checkbox" value="1" />印刷する
となる。
submit した際の parameter 値は
選択時 => "print"=>{"enabled"=>"0"}
非選択時 => "print"=>{"enabled"=>"1"}
となる。
要は、check_box タグを利用すると、checkbox を Hash でパラメータ渡しできるようになる。
なので、配列化したい場合は、それぞれの項目に名前をつけてやって Hash の key として扱ってやればよい。

例) ディナーのコースを選択する。必要なコースがあればチェックをつける
<%= check_box "dinner", "zensai" %>前菜
<%= check_box "dinner", "supe" %>スープ
<%= check_box "dinner", "main" %>メインディッシュ
<%= check_box "dinner", "dezart" %>デザート
<%= check_box "dinner", "drink" %>ドリンク
これで、ディナーパラメータ値にハッシュとして配列化されてコントローラに渡ってくる。

無理に配列化するメリットは何もない。意味不明な index で値を取得する必要も
ないし、未選択時に飛んでこないなんてこともない。

0 件のコメント: