當我訪問像example.com/shop?genre=13,
這樣的網址時,它應該會自動顯示默認的選擇集13,但是它顯示的是第一行選擇。
爲什麼?爲什麼「選擇」選項在此不起作用?
<%= select_tag :genre, options_for_select(Genre.all.map{ |g| [g.name, g.id] }), :selected => params[:genre] %>
當我訪問像example.com/shop?genre=13,
這樣的網址時,它應該會自動顯示默認的選擇集13,但是它顯示的是第一行選擇。
爲什麼?爲什麼「選擇」選項在此不起作用?
<%= select_tag :genre, options_for_select(Genre.all.map{ |g| [g.name, g.id] }), :selected => params[:genre] %>
如果你想選擇一個選項,您需要將值傳遞給options_for_select
方法。如果您查找該方法的簽名,你會發現:該文檔在http://api.rubyonrails.org/classes/ActionView/Helpers/FormOptionsHelper.html#method-i-options_for_select
options_for_select(container, selected = nil)
進一步閱讀會導致你的例子:
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]) %>
<%= select_tag :genre, options_for_select(Genre.all.map{ |g| [g.name, g.id] },params[:genre]) %>
options_for_select兩個參數,與選擇的選項的數組,然後你想要的值表示的選定。
你早參數options_for_select
感謝您的幫助:) – cat
感謝,這正是我想要的東西! – cat