Rails:在ActionView-Helper’collection_select’中预选值

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

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

  @my_collection_object.id}) %> 

nor( :selected在选项 – 哈希中选择)

  @my_collection_object.id}, {}) %> 

似乎工作。

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

来自文档 :

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

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

如果@post.author_id已经为1,则会返回:

  

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

根据文档 ,如果@my_object.my_method与其中一个选项具有相同的值,则默认选择该选项。

相反,您可以尝试将options_from_collection_for_selectselect_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值数组的数组forms,它也可以工作:

 CURRENCIES = [["USD", "$"], ["BRL", "R$"]] <%= collection_select :thing, :currency, CURRENCIES, :first, :last %> 

:first:last技巧非常适合这些事情,而不必为它们定义单独的模型。