5

我正在尝试让ActionView-Helpercollection_select采用将在下拉菜单中预选的值。

两者都没有(:selected在 html-option-hash 中)

<%= collection_select(:my_object, :my_method, @my_collection, :id, :description_string, {}, {:selected => @my_collection_object.id}) %>

也不是(:selected在选项哈希中)

<%= collection_select(:my_object, :my_method, @my_collection, :id, :description_string, {:selected => @my_collection_object.id}, {}) %>

似乎工作。

我究竟做错了什么?谁能帮我解决这个问题?

4

5 回答 5

8

文档

示例用法(Author为 , 的实例选择关联Post@post):

collection_select(:post, :author_id, Author.all, :id, :name_with_initial)

如果@post.author_id已经是 1,这将返回:

<select name="post[author_id]">
  <option value="">Please select</option>
  <option value="1" selected="selected">D. Heinemeier Hansson</option>
  <option value="2">D. Thomas</option>
  <option value="3">M. Clark</option>
</select>

因此,您只需要确保@my_object.my_method返回一个与可用选项值之一匹配的值。如果匹配,则将选择该选项。

于 2009-06-19T17:29:58.647 回答
2

根据文档,如果@my_object.my_method与选项之一具有相同的值,则默认情况下将选择该选项。

相反,您可以尝试options_from_collection_for_select结合使用select_tag

<%= select_tag 'my_object[my_method]', options_from_collection_for_select(@my_collection, :id, :description_string, @my_collection_object.id) %>
于 2009-06-19T16:35:20.633 回答
1

利用:selected_value

%= collection_select(:my_object, :my_method, @my_collection, :id, :description_string, {}, {:selected_value => @my_collection_object.id}) %>
于 2009-08-24T18:32:04.403 回答
0

检查 @my_object.my_method 是否返回 nil。如果是这样,

如果调用方法返回 nil,则在选项哈希中不包含 :prompt 或 :include_blank 时不会进行选择。

除此之外,您可以尝试使用 lambda,就像在 rdoc 示例中一样

{:disabled => lambda {|category| category.archived? }

在你的情况下,这看起来像

{:selected => lambda {|obj| obj.id == @my_collection_object.id }}
于 2009-06-19T16:40:26.780 回答
-1

如果您的集合是 2 值数组的数组形式,它也可以工作:

CURRENCIES = [["USD", "$"], ["BRL", "R$"]]

<%= collection_select :thing, :currency, CURRENCIES, :first, :last %>

:firstand技巧对这些:last东西非常有效,无需为它们定义单独的模型。

于 2011-07-17T07:59:19.057 回答