我正在尝试在包含所有状态的视图上填充下拉框。这很好用:
<%= f.collection_select :state_id, @states, :id, :name %>
现在,我需要进行以下操作:某些状态将被禁用以进行选择,但它们仍然必须出现在dropbown列表中。
我怎样才能做到这一点? (我可以为这些状态填充额外的列表)。
答案 0 :(得分:2)
collection_select
内部依赖options_from_collection_for_select
帮助。
您可以使用collection_select
并传递select
电话的结果,而不是直接使用options_from_collection_for_select
。您可能希望直接调用options_from_collection_for_select
的原因是因为此方法还接受可选的selected
参数,该参数可用于传递disabled
项的值。
selected
也可以是哈希值,根据需要指定:selected
和/或:disabled
值。
该选项的值可以是以下之一
如果将selected指定为值或值数组,则返回value_method匹配的元素将被选中选项标记。
如果将selected指定为Proc,那么对于匿名函数返回true的集合成员是选定的值。
因此,如果您通过{ disabled: [1, 3, 5] }
,则会禁用项目1, 3, 5
。当然,该值必须与选项的值匹配。你也可以通过一个街区。
老实说,这个Rails助手看起来很复杂。另一种选择是仍然直接使用select
,但是创建自己的帮助器来生成HTML选项的字符串并将字符串直接传递给select(这是options_from_collection_for_select
正在做的事情,而不是非常简单的API)。