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

如果要选择一个选项,则需要将值传递给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]) %>
于 2013-01-05T00:27:40.623 回答
1
<%= select_tag :genre, options_for_select(Genre.all.map{ |g| [g.name, g.id] },params[:genre]) %>

options_for_select 接受两个参数,带有选择选项的数组,然后是您想要显示的值。

您对 options_for_select 有一个参数

于 2013-01-05T00:24:13.947 回答