在collection_select上允许一些启用和禁用选项

时间:2015-06-22 18:39:04

标签: ruby-on-rails ruby

我正在尝试在包含所有状态的视图上填充下拉框。这很好用:

<%= f.collection_select :state_id, @states, :id, :name %>

现在,我需要进行以下操作:某些状态将被禁用以进行选择,但它们仍然必须出现在dropbown列表中。

我怎样才能做到这一点? (我可以为这些状态填充额外的列表)。

1 个答案:

答案 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)。