2013-01-04 370 views
0

當我訪問像example.com/shop?genre=13,
這樣的網址時,它應該會自動顯示默認的選擇集13,但是它顯示的是第一行選擇。
爲什麼?爲什麼「選擇」選項在此不起作用?

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

回答

1

如果你想選擇一個選項,您需要將值傳遞給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]) %> 
+0

感謝,這正是我想要的東西! – cat

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

options_for_select兩個參數,與選擇的選項的數組,然後你想要的值表示的選定。

你早參數options_for_select

+0

感謝您的幫助:) – cat

相關問題