いや〜 前回の記事 もそうなんですけど、最近は Rails であれやこれや作ることが多くて、フォームとかも作ったりするわけです。そうなるとたま〜にプルダウンなんかも扱うことになったりします。

テキストフォームとかラジオボタン、まぁチェックボックスぐらいまでは(慣れたので) Rails のヘルパーを使ってさらさらっとかけて良いんですが、たまに使うプルダウンはハマることが多い。ちょいちょい使い方よくわからなくてググるんですが、なかなか良い情報に遭遇できなくて結局ソースを見て解決する、というパターンが多いわけです。・・というのが時間の無駄なので、簡単にですがまとめときます><

select メソッドの定義はこんな感じになっています。

# actionpack-3.0.7/lib/action_view/helpers/form_options_helper.rb
def select(object, method, choices, options = {}, html_options = {})

ので、select メソッドはこのように使います。options と html_options の両方を受け取るのがとてもわかりにくいミソです。

# 選択肢のデータを配列形式 [[表示データ, 送信データ], ...] で作成する
- choices = Item.all.map{|i| [i.name, i.id]}

# (1) optionsを設定する例
= f.select :item_id, choices, {:include_blank => true}

# (2) optionsは空で、html_optionsを設定する例
= f.select :item_id, choices, {}, {:onchange => "alert('change')"}

あとプルダウン作るときって、先頭に未選択状態のデータを作ったりすると思うんですが(選択してくださいとか)、そういうときには options に include_blank を設定すれば簡単です。true を指定すると空行が先頭に追加されますが、文字列を指定すればそれが表示されます。
このエントリーをはてなブックマークに追加