yo_waka's blog

418 I'm a teapot

Railsでセレクトボックスの出力

selectとかselect_tagとかcollection_selectとかいろいろあってオプションの指定も微妙に違ってたり分かりにくい。
ActiveRecordの配列と普通の配列を同じように扱えて、name属性を自由に定義したい。
いろいろ試してみたところ、select_tagとoptions_for_selectを使うのがよさげな感じがした。

<!-- ActiveRecordの配列を受け取る -->
<%= select_tag "user", options_for_select(@users.map {|u| [u.name, u.id]}), prompt: t('user') %>
<!-- 配列([name, id])を受け取る -->
<%= select_tag "status", options_for_select(@statuses), prompt: t('status') %>

selectとcollection_selectはname属性が"オブジェクト名[プロパティ名]"になる。
promptは未選択時の項目、空欄でよければinclude_blankをオプションに指定する。