2013-01-04 173 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

相关问题