WebHelper rails form_option チート集


webhelpers.rails.form_options

optionタグを生成する(h.options_for_select)
optionタグを生成する その2(h.options_for_select_from_objects)


optionタグを生成する(h.options_for_select)



以前、h.selectを使用してselectタグを生成する方法を
紹介しましたが、selectタグ内のoptionタグはベタに
書かないといけませんでした。

optionタグをリストから生成するには
h.options_for_selectを使用します。

h.selectと組み合わせて


${h.select('select_test', h.options_for_select(["VISA", "MasterCard"]))}


これで


<select id="select_test" name="select_test">
<option value="VISA">VISA</option>
<option value="MasterCard">MasterCard</option>
</select>


こんな感じのHTMLが出力されます。

値と表示する文字を変更したい場合は、リストの中にリストを入れるか、
辞書を渡せばよい模様


${h.select('select_test', h.options_for_select([["Dollar", "$"], ["Kroner", "DKK"]]))}
${h.select('select_test', h.options_for_select(dict(Basic="$20", Plus="$40")))}


初期選択状態にする値を指定したい場合は


${h.select('select_test', h.options_for_select(["VISA", "MasterCard"], "MasterCard"))}


初期表示させたい項目を第二引数に指定すればOKです。

複数選択のリストで複数初期表示の状態を変更したい場合は、


${h.select('select_test', h.options_for_select(["VISA", "MasterCard", "Discover"], ["VISA", "Discover"]),multiple=True)}


こんな感じで、選択させたい項目のリストを渡します。


optionタグを生成する その2(h.options_for_select_from_objects)



オブジェクトの入ったリストからoptionタグを
生成する方法です。



<%
class Clazz:
 def __init__(self,name,attr):
  self.name = name
  self.attr = attr

l = [Clazz('test1', 'attr1'), Clazz('test2', 'attr2'), Clazz('test3', 'attr3')]
%>
<select>
${h.options_for_select_from_objects(l, 'name', value_attr='attr', selected='attr3')}
</select>



第一引数にリスト、第二引数にプロパティ名を渡します。

その他に
・valueに指定するプロパティ
value_attr='attr'

・初期表示する項目
selected='attr3'


これは便利。


もう一つ、辞書を引数に指定する方法です。


<% l = [{'title':'title1','attr':'attr1'},{'title':'title2','attr':'attr2'}] %>
${h.options_for_select_from_dicts(l, "title", value_key='attr', selected='attr2')}



第一引数にリスト、第二引数に表示する文字列のキーを指定します。
また
・valueに指定するプロパティ
value_key='attr'

・初期表示する項目
selected='attr2'

の指定が行えます。




もどる