RubyonRails 上的f.select选项与自定义属性的疑问?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (26)

我有一个f.SELECT语句,如下所示:

= f.select :country_id, @countries.map{ |c| [c.name, c.id] }

结果

...
<option value="1">Andorra</option>
<option value="2">Argentina</option>
...

但是我想在选项中添加一个自定义HTML属性,如下所示:

...
<option value="1" currency_code="XXX">Andorra</option>
<option value="2" currency_code="YYY">Argentina</option>
...
提问于
用户回答回答于

Rails可以使用现有选项添加自定义属性来选择选项。options_for_select helper

使用html5 data-attributes:

<%= f.select :country_id, options_for_select(@countries.map{ |c| [c.name, c.id, {'data-currency_code'=>c.currency_code}] }) %>

添加初始选择:

<%= f.select :country_id, options_for_select(@countries.map{ |c| [c.name, c.id, {'data-currency_code'=>c.currency_code}] }, selected_key = f.object.country_id) %>

用户回答回答于

这不可能直接用Rails实现,你必须创建自己的帮助器来创建自定义属性。也就是说,可能有两种不同的方式来实现:

(1)在HTML5中使用自定义属性名称。在HTML5中,自定义属性名称,但必须预先使用'data-'。

<option value="1" data-currecy-code="XXX">Andorra</option>

(2)通过自定义分割使用值来提交附加数据。如果你真的想提交代码,这样:

= f.select :country_id, @countries.map{ |c| [c.name, "#{c.id}:#{c.currency_code}"] }

这生成如下所示的HTML:

<option value="1:XXX">Andorra</option>
<option value="2:YYY">Argentina</option>

可以在控制器中解析:

@id, @currency_code = params[:country_id].split(':')

扫码关注云+社区