在select_tag </option>中为<option>标记设置HTML选项

时间:2014-06-19 21:28:12

标签: ruby-on-rails erb

在以下ERB中:

<%= form_for @my_model do |f| %>
  <%= f.select :my_attribute, options_from_collection_for_select(@my_options, :attribute, :name), {class: "select-style"} %>
<% end %>

最后的HTML选项将应用于注入的HTML中生成的<select>标记。如何提供将应用于注入的<option>标记的HTML样式选项?

Rails文档explains how to do this when using options_for_select,但不适用于使用options_from_collection_for_select时。

2 个答案:

答案 0 :(得分:2)

有趣的问题。你从哪里获得html选项?
比如,你想要一个所有选项的静态类:

<%= f.select :my_attribute, options_from_collection_for_select(@my_options.map{|o| [o.attribute,{class: 'select-style'},o.name], :first, :last) %>

原因,您可以从属性my_option设置类。

诀窍是,options_from_collection_for_select还从每个元素(哈希)中提取html选项,因此您必须构造元素以包含此哈希。

但是,您也可以使用options_for_select(内部为options_from_collection_for_select):

<%= f.select :my_attribute, options_for_select(@my_options.map{|o| [o.name,{class: 'select-style'},o.attribute]) %>

答案 1 :(得分:1)

在我看来,这个选项不可用。 你可以这样做:

<%= options_from_collection_for_select(@my_options.map { |o| [o.attribute, o.name, { class: 'option-style' }] }, :first, :second) %> - 但它的丑陋。

只需使用options_for_select:

即可

<%= options_for_select(@my_options.map { |o| [o.attribute, o.name, { class: 'option-style' }] }) %>