我想获得的ActionView-助手collection_select
采取将在下拉菜单中预选的值。
无论是( :selected
在HTML选项哈希)
<%= 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}, {}) %>
似乎工作。
我究竟做错了什么? 谁能帮我在这一个?
从文档 :
用法示例(选择相关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
返回匹配的可用选项值的一个值。 如果有一个匹配,那么该选项将被选中。
根据该文件 ,如果@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返回零。 如果是这样,
如果在调用方法返回零,不进行选择,而不包括由:提示或:include_blank在选项哈希值。
除此之外,你可以尝试使用lambda,就像在RDoc的例子
{:disabled => lambda {|category| category.archived? }
在你的情况,这将像
{:selected => lambda {|obj| obj.id == @my_collection_object.id }}
它也可以,如果你的收集是在2值数组的数组的形式:
CURRENCIES = [["USD", "$"], ["BRL", "R$"]]
<%= collection_select :thing, :currency, CURRENCIES, :first, :last %>
的:first
和:last
招工作很好地为这些事情,而不必定义一个单独的模型他们。