当我访问像 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] %>
如果要选择一个选项,则需要将值传递给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]) %>
<%= select_tag :genre, options_for_select(Genre.all.map{ |g| [g.name, g.id] },params[:genre]) %>
options_for_select 接受两个参数,带有选择选项的数组,然后是您想要显示的值。
您对 options_for_select 有一个参数