扶手:预选中的ActionView-助手“collection_select”的值(Rails: P

2019-09-16 13:46发布

我想获得的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}, {}) %>

似乎工作。

我究竟做错了什么? 谁能帮我在这一个?

Answer 1:

从文档 :

用法示例(选择相关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返回匹配的可用选项值的一个值。 如果有一个匹配,那么该选项将被选中。



Answer 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) %>


Answer 3:

用途:selected_value

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


Answer 4:

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

如果在调用方法返回零,不进行选择,而不包括由:提示或:include_blank在选项哈希值。

除此之外,你可以尝试使用lambda,就像在RDoc的例子

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

在你的情况,这将像

{:selected => lambda {|obj| obj.id == @my_collection_object.id }}


Answer 5:

它也可以,如果你的收集是在2值数组的数组的形式:

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

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

:first:last招工作很好地为这些事情,而不必定义一个单独的模型他们。



文章来源: Rails: Preselect a value in ActionView-Helper 'collection_select'