当我访问example.com/shop这样的url时?流派=13,
它应该自动显示值为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采用两个参数,一个是带有select选项的Array,然后是要显示的选定值。
您有一个参数用于options_for_select