: O. Yuanying

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 は、 デフォルトの選択を指定しています。