轨道上的红宝石 - 为什么选项"选择"在此不起作用?



当我访问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

相关内容

  • 没有找到相关文章

最新更新