example.com/shop?genre=13のようなURLにアクセスする
と、値13で設定されたデフォルトの選択が自動的に表示されます。ただし、選択の最初の行が表示されます。
なんで?
<%= select_tag :genre, options_for_select(Genre.all.map{ |g| [g.name, g.id] }), :selected => params[:genre] %>
example.com/shop?genre=13のようなURLにアクセスする
と、値13で設定されたデフォルトの選択が自動的に表示されます。ただし、選択の最初の行が表示されます。
なんで?
<%= select_tag :genre, options_for_select(Genre.all.map{ |g| [g.name, g.id] }), :selected => params[:genre] %>
<%= select_tag :genre, options_for_select(Genre.all.map{ |g| [g.name, g.id] },params[:genre]) %>
options_for_selectは、2つの引数を取ります。選択オプションのある配列と、表示する値を選択します。
options_for_selectに対して1つの引数がありました
オプションを選択する場合は、値をoptions_for_select
メソッドに渡す必要があります。メソッドのシグネチャを検索すると、次のことがわかります。
options_for_select(container, selected = nil)
http://api.rubyonrails.org/classes/ActionView/Helpers/FormOptionsHelper.html#method-i-options_for_selectのドキュメントをさらに読むと、次の例が表示されます。
options_for_select(["Free", "Basic", "Advanced", "Super Platinum"], :selected => "Free", :disabled => "Super Platinum")
<option value="Free" selected="selected">Free<%roption>\n<option value="Basic">Basic</ption>\n<option value="Advanced">Advanced<%roption>\n<option value="Super Platinum" disabled="disabled">Super Platinum</option>
あなたの場合、あなたはそれを以下で動作させることができるはずです:
<%= select_tag :genre, options_for_select(Genre.all.map{ |g| [g.name, g.id] }, :selected => params[:genre]) %>
補足として。Genre
ActiveRecordモデルだと思います。この場合、を使用できますoptions_from_collection_for_select
。このメソッドは、ActiveRecordモデルの配列からオプションタグのリストを作成するように設計されています。ドキュメントは次の場所にあります:http://api.rubyonrails.org/classes/ActionView/Helpers/FormOptionsHelper.html#method-i-options_from_collection_for_select
コードは次のようになります。
<%= select_tag :genre, options_from_collection_for_select(Genre.all, 'id', 'name', params[:genre]) %>