我正在尝试获取 ActionView-Helper collection_select 获取将在下拉菜单中预先选择的值。

(html-option-hash中的:selected

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

nor(:在选项 - 哈希中选择

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

似乎有效。

我做错了什么?任何人都可以帮我这个吗?

有帮助吗?

解决方案

来自 docs

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

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 返回一个与可用选项值相匹配的值。如果匹配,则选择该选项。

其他提示

根据文档,如果 @ 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) %>

使用:selected_value

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

检查@ 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 }}

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

CURRENCIES = [["USD", "<*>quot;], ["BRL", "R<*>quot;]]

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

:first :last 技巧可以很好地处理这些事情,而无需为它们定义单独的模型。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top