为什么选择“已选择”不起作用?

时间:2013-01-04 23:53:07

标签: ruby-on-rails ruby-on-rails-3 view

当我访问url时,例如example.com/shop?genre=13,
它应自动显示值为13的默认选择集。 但是,它显示了第一行选择 为什么呢?

 <%= select_tag :genre, options_for_select(Genre.all.map{ |g| [g.name, g.id] }),  :selected => params[:genre] %>

2 个答案:

答案 0 :(得分:1)

<%= select_tag :genre, options_for_select(Genre.all.map{ |g| [g.name, g.id] },params[:genre]) %>

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

您对options_for_select有一个参数

答案 1 :(得分: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]) %>