首页 > 解决方案 > 如何根据 Ruby on Rails 中的记录类别有条件地显示表的内容?

问题描述

我在 RoR 中迈出了第一步,尝试显示“附带”表的内容,并根据附带类别对它们进行排序。因此,例如,我想在我的视图中以可折叠的方式显示属于“沐浴”类别的所有杂物(肥皂、毛巾、洗发水等),然后显示属于“电子”类别的所有杂物(A/C、电视机,遥控器等),在另一个可折叠的。

到目前为止,我已经设法用这段代码做到了这一点,我觉得这非常肮脏和低效:

<ul class="collapsible">
    <li>
      <div class="collapsible-header"><i class="material-icons">filter_drama</i>Baño y Aseo</div>
      <div class="collapsible-body">
        <table class="striped centered">
          <thead>

          </thead>

          <tbody>
            **<% Incidental.all.each do |incidental| %>
              <% case incidental.category %>
                <% when "bath" %>
                  <tr>
                    <td><%= incidental.item %></td>
                    <td><a href="#" class="btn btn-submit">Pedir</a></td>
                  </tr>
                <% end %>
              <% end %>**
          </tbody>
        </table>
      </div>
    </li>

    <li>
      <div class="collapsible-header"><i class="material-icons">place</i>Electrodomésticos</div>
      <div class="collapsible-body"><span>Lorem ipsum dolor sit amet.</span>
        <<table class="striped centered">
          <thead>

          </thead>

          <tbody>
            <% Incidental.all.each do |incidental| %>
              <% case incidental.category %>
                <% when "electro" %>
                  <tr>
                    <td><%= incidental.item %></td>
                    <td><a href="#" class="btn btn-submit">Pedir</a></td>
                  </tr>
                <% end %>
              <% end %>
          </tbody>
        </table>
      </div>
    </li>
    <li>
      <div class="collapsible-header"><i class="material-icons">whatshot</i>Third</div>
      <div class="collapsible-body"><span>Lorem ipsum dolor sit amet.</span></div>
    </li>
  </ul>

这行得通,但为了实现这一点,我必须运行多个<% Incidental.all.each 做 |incidental| %>循环并遍历整个表,同时仅显示带有案例块的相关记录。对我来说,这看起来是一种非常低效且“非 RoR-ish”的方法。

我想做的是只浏览一次“附带清单”,并在适当的可折叠物品上显示每个项目。我应该如何实现这一目标?先感谢您!

标签: htmlruby-on-railsdatabaseiteration

解决方案


你的模型上有示波器设置吗?我会尝试类似的东西:

## app/models/incidental.rb
class Incidental < ApplicationRecord
  scope :electro -> { where category: 'electro' }
  ...
  ...

end

这将使您可以:

<% Incidental.electro.each do |incidental| %>
  <tr>
    <td><%= incidental.item %></td>
    <td><a href="#" class="btn btn-submit">Pedir</a></td>
  </tr>
<% end %>

哪个应该给你想要的结果


推荐阅读