【问题标题】:select dropdown and each block - Ruby/Rails选择下拉列表和每个块 - Ruby/Rails
【发布时间】:2016-07-27 12:33:27
【问题描述】:

我有一个简单的each 块,它获取每个类别并创建一个option

@categories = Category.all

<select id="bike_category_filter" multiple="multiple">
  <% @categories.each do |c| %>
    <option value="<%= c.name %>"><%= c.name %></option>
  <% end %>

我想对Men and Women 类别(所以 c.name)用&lt;optgroup&gt; 标签包围它们。我怎么能做到这一点,一个资源链接或关于在哪里寻找的解释就足够了,不一定要找人给我答案

想要的输出应该是这样的

<select>
  <optgroup label="Gender">
    <option value="cat1">Men</option>
    <option value="cat2">Women</option>
  </optgroup>
    <option value="cat3">Cat5</option>
    <option value="cat4">Cat4</option>
</select>

谢谢

【问题讨论】:

  • MenWoman 的类别识别标准是什么?
  • 您的意思是如何收集该值?如果是这样c.name
  • 你需要这个jsfiddle.net/6tqamxvz输出对吗?
  • 我用所需的输出更新了我的问题,谢谢
  • 好的,现在我的问题是您如何识别该类别属于Gender optgroup

标签: ruby-on-rails ruby ruby-on-rails-4


【解决方案1】:

最后我实现了这个方案,我还是觉得这可以做得更优雅

Controller

@gender_categories = Category.where(name: ['Mens', 'Womens'])
@categories = Category.where.not(name: ['Mens', 'Womens'] )

View 

<select id="bike_category_filter" multiple="multiple">
  <optgroup label="Gender">
    <% @gender_categories.each do |c| %>
      <option value="<%= c.name %>"><%= c.name %></option>
    <% end %>
  </optgroup>

  <optgroup label=" Bike Type">
    <% @categories.each do |c| %>
      <option value="<%= c.name %>"><%= c.name %></option>
    <% end %>
 </optgroup>
</select>

【讨论】:

    【解决方案2】:

    有一个漂亮的方法叫做partition,它将项目分成两组。

    控制者:

    @primary_group, @secondary_group = Category.all.partition { |c| c.name == 'Men' or c.name == 'Woman'}
    

    查看

    <select id="bike_category_filter" multiple="multiple">
      <optgroup label="Gender">
        <% @primary_group.each do |c| %>
          <option value="<%= c.name %>"><%= c.name %></option>
        <% end %>
      </optgroup>
    
      <% @secondary_group.each do |c| %>
        <option value="<%= c.name %>"><%= c.name %></option>
      <% end %>
    </select>
    

    【讨论】:

    • 感谢您的回答,但我认为视图中的任何逻辑都是否定的。感谢您抽出宝贵时间回答
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多