ruby on Rails:如何更改选择列表中选项的背景颜色

Aus*_*wer 3 select ruby-on-rails list

我想从模型中提取颜色列表并将颜色选择列表放入视图中。选项具有颜色代码的价值。我想将选项的背景颜色更改为其值。以下是我尝试做的两种方法,但结果是它会改变整个选择列表的颜色,但不会改变具有单个颜色的单个选项的颜色。

<p>
    <b>Background color</b><br />    
    collection_select(:setting, :bg_color, @colors, :code, :name, 
    options ={:prompt => "-Select a color"}, html_options = {:style => "background-color: #3f3"})
  </p>

  <p>
    <b>New Background color</b><br />
 select_tag("setting[bg_color]", "<option>-Select a color</option>" + 
  options_from_collection_for_select(@colors, :code, :name, html_options = {:style => "background-color: #3f3"})) 
  </p>
Run Code Online (Sandbox Code Playgroud)

我希望它生成类似以下内容的内容:

<option value='color_code' style='background-color: color_code'  >color_name</option> 
Run Code Online (Sandbox Code Playgroud)

这样,选项中的颜色对用户也是可见的。

无论如何,我们可以自定义选项吗?

提前致谢。

wes*_*son 6

Rails 助手不支持这样的 html_options 。不过,您可以创建自己的辅助方法。

def options_with_colors(colors)
  colors.collect do |color, code| 
    "<option value='#{code}' style='background-color:#{code};'>#{color}</option> "
  end.join
end
Run Code Online (Sandbox Code Playgroud)

打电话像:

@colors = ["Red" => "#f00", "Blue" => "blue"]
select_tag("setting[bg_color]", options_with_colors(@colors))
Run Code Online (Sandbox Code Playgroud)