Rails:在ActionView-Helper'collection_select'中预选一个值
-
06-07-2019 - |
题
我正在尝试获取 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
技巧可以很好地处理这些事情,而无需为它们定义单独的模型。
不隶属于 StackOverflow