Rails Formtastic:将“data-”字段添加到选项标签

我有:

form.input :duration, as: select, collection: {} 

我需要:

  

Rails不支持选项标记的HTML5数据属性。 Formtastic 建议为此创建一个辅助方法。

Formtastic自述文件描述了如何扩展输入标签。 但是,在select_input.rb中,我找不到任何会影响选项标签的方法。 那么,我该怎么做?

此外,我发现enhanced_select gem正是我所需要的,但我无法使其与formtastic一起工作。

实际上rails确实支持向选项添加任何类型的html标记。 通常你会:

 options_for_select( [['First', 1], ['Second', 2]] ) 

这会给你

   

如果为每个选项向数组添加哈希,则哈希键/值将作为HTML属性添加到选项中,例如

 options_for_select( [['First', 1, {:'data-price' => 20}], ['Second', 2, {:'data-price' => 30}]] ) 

将生成所需的标签:

   

假设你有一个名为Items的模型,你可以用formtastic这样做:

 form.select :duration, collection: Items.map{|item| [item.name, item.id, {"data-price" => item.price}]} 

基本上你正在做的是传递一个数组数组,其中每个数组中的最终值是一个哈希值。 例如

 [ ['Item 1', 1, {"data-price" => '$100'}], ['Item 2', 2, {"data-price" => '$200'}] ] 

Rails 3+(可能2.x – 我没有确认)将使用数组中的哈希值,只需将其添加到选项标记的html中。 给你以下:

   
 options_for_select([ ['Item 1', 1, data:{price: 121, delivery: 11}], ['Item 2', 2, data:{price: 122, delivery: 22}] ]) 

产生

   

优点

使用数据:{…}更简洁,如果使用多个数据标签可以保存代码。