0

example.com/shop?genre=13のようなURLにアクセスする
と、値13で設定されたデフォルトの選択が自動的に表示されます。ただし、選択の最初の行が表示されます。
なんで?

 <%= select_tag :genre, options_for_select(Genre.all.map{ |g| [g.name, g.id] }),  :selected => params[:genre] %>
4

2 に答える 2

1
<%= select_tag :genre, options_for_select(Genre.all.map{ |g| [g.name, g.id] },params[:genre]) %>

options_for_selectは、2つの引数を取ります。選択オプションのある配列と、表示する値を選択します。

options_for_selectに対して1つの引数がありました

于 2013-01-05T00:24:13.947 に答える
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]) %>

補足として。GenreActiveRecordモデルだと思います。この場合、を使用できます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]) %>
于 2013-01-05T00:27:40.623 に答える