TECH EXPERT 56日目

TECH::EXPERT

searchページの制作を担当。
とりあえずマークアップから。
gem使えば楽なのは承知で自力実装したいので色々調べてます。

select_tag

=select_tag :category_id, options_from_collection_for_select(@categories, 'id', 'name')
<select name="category_id" id="category_id">
<option value="1">レディース</option>
<option value="138">メンズ</option>
<option value="517">本・音楽・ゲーム</option></select>
 =select_tag :category_id, options_from_collection_for_select(@categories, 'id', 'name'), { prompt: 'すべて', class: 'hoge' }
<select name="category_id" id="category_id" class="hoge">
<option value="">すべて</option>
<option value="1">レディース</option>
<option value="138">メンズ</option>
<option value="517">本・音楽・ゲーム</option></select>

options_from_collection_for_select

options_from_collection_for_select(オブジェクト, value, 出力text, 初期値)

初期値にvalueの値を指定すればその値が選択された状態で生成される。
params[:id]を渡す場合は文字列型なのでto_iしないと型違いで撥ねられる(見選択になる)ので注意。

options_for_select

第一引数に表示する配列を。
第二引数にselectedにする配列を渡す。

options_for_select([a, b, c])と渡す場合は
value=a text=aのoptionが3回作成される。

options_for_select([[a, 1], [b, 2], [c, 3]])と渡す場合は
value=1 text=aのoptionが3回作成される。

属性を渡す場合は[a, 1]の部分を[a, 1, {class: “hoge”}]

= options_for_select([ "Denmark", ["USA", 3,{class: 'bold'}], "Sweden" ], ["USA", "Sweden"])
<option value="Denmark">Denmark</option>
<option class="bold" value="3">USA</option>
<option selected="selected" value="Sweden">Sweden</option>

optionタグ内にidやクラスを付与するには以下のようにmapで分解してやる必要がある。

options_for_select(@categories.map{|i| [i.name, i.id, id: "category_#{i.id}"]})
<select name="category_id" id="category_id" class="search-root"><option value="">タグで絞り込み</option><option id="category_1" value="1">レディース</option>
<option id="category_138" value="138">メンズ</option>
<option id="category_259" value="259">ベビー・キッズ</option>
<option id="category_387" value="387">インテリア・住まい・小物</option>
<option id="category_517" value="517">本・音楽・ゲーム</option></select>

f.collection_select

= f.collection_select( :category_id, @categories, :id, :name,{prompt: "すべて"}, {class: "search-root", id: "category-root"})
<select class="search-root" id="category-root" name="category_id">
<option value="">すべて</option>
<option value="1">レディース</option>
<option value="138">メンズ</option>
<option value="517">本・音楽・ゲーム</option></select>

f.select

=f.select :sex, [['Male', 1], ['Female', 2]]
<select name="sex" id="sex">
<option value="1">Male</option>
<option value="2">Female</option></select>

ruby

chars = []
result = ['a', 'b', 'c'].map{ |c| chars << c.upcase }
=> [["A", "B", "C"], ["A", "B", "C"], ["A", "B", "C"]]
なぜ?

コメント