Rails で select タグ
妙に忘れるのでメモ。
覚えるタグは基本的に三つ。
- モデルの属性値を select タグで選択したい
- collection_select
- モデルの属性値以外を select タグで選択したい
- select_tag / options_from_collection_for_select
collection_select
モデルの属性値を select する。
collection_select(object, method, collection, value_method, text_method, options = {}, html_options = {})
たとえば、 user オブジェクトの locale 属性を、 [ [:jp, 'Japan'], [:us, 'United States'], [:uk, 'United Kingdom'] ] から選択させたい場合は、
<%= collection_select(
:user,
:locale,
[ [:jp, 'Japan'], [:us, 'United States'], [:uk, 'United Kingdom'] ],
:first,
:last
) %>
となる。
:first と :last は [:jp, 'Japan'] という配列の :jp を取り出すのに [:jp, 'Japan'].first を使い、 'japan' を取り出すのに[:jp, 'Japan'].last を使うという意味。
select_tag
モデルの属性値以外の値を select したい場合は select_tag を使う。
select_tag(name, option_tags = nil, options = {})
といっても select_tag は、 <select>を出力するだけ。 中身の option タグを出力するには options_from_collection_for_select を使う。
options_from_collection_for_select
options_from_collection_for_select(collection, value_method, text_method, selected = nil)
<select name='locale'> な select タグを作りたかったら、
<%= select_tag(
'locale',
options_for_select(
[ [:jp, 'Japan'], [:us, 'United States'], [:uk, 'United Kingdom'] ]
:first,
:last,
:jp
)
) %>
となる。
最後の :jp は、 デフォルトの選択を指定しています。