如何基于模型为grouped_options_for_select生成数组

Chr*_*ini 5 ruby-on-rails

产品belogs_to类别.一个类别has_many产品

我需要一个包含optgroup标签的select标签.

所以基本上,我需要我的HTML标记类似于伪代码:

<select name="product" class="products">
  <option value=""></option>
  <optgroup label="Cheese">
    <option value="1">cheese 1</option>
    <option value="2">cheese 2</option>
    <option value="3">cheese 3</option>
  </optgroup>
  <optgroup label="Juices">
    <option value="3">juice 1</option>
    <option value="4">juice 2</option>
    <option value="5">juice 3</option>
  </optgroup>
</select>
Run Code Online (Sandbox Code Playgroud)

基于我的模型,我如何生成要放入grouped_options_for_select的数组?例如,生成groups_options的最佳方法是什么?

<%= select_tag 'product', grouped_options_for_select(grouped_options), :include_blank => true , :id => nil, :class => 'product' %>
Run Code Online (Sandbox Code Playgroud)

Bit*_*rse 13

控制器:

@products = Product.all(:include => :category)
@grouped_options = @products.inject({}) do |options, product|
  (options[product.category.name] ||= []) << [product.name, product.id]
  options
end
Run Code Online (Sandbox Code Playgroud)

视图:

<%= select_tag 'product', grouped_options_for_select(@grouped_options), :include_blank => true , :id => nil, :class => 'product' %>
Run Code Online (Sandbox Code Playgroud)

  • 或`products.inject({}){| options,product | options.merge(product.category_name => [product.name,product.id])}` (5认同)