Как я могу условно отобразить содержимое таблицы в зависимости от категории записей в Ruby on Rails? - PullRequest
0 голосов
/ 23 сентября 2019

Я делаю свои первые шаги в 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 do |idental |%> циклически повторяется по всей таблице, отображая только соответствующие записи с блоком case.Это выглядит как очень неэффективный и «не-RoR-ишный» подход ко мне.

Я хотел бы перейти к «случайному списку» только один раз и отобразить каждый элементна соответствующем разборном.Как мне добиться этого?Заранее спасибо!

Ответы [ 2 ]

1 голос
/ 23 сентября 2019

У вас есть настройка объема на вашей модели?Я бы попробовал что-то вроде:

## 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 %>

Что должно дать желаемый результат

0 голосов
/ 23 сентября 2019

Вы можете попробовать прицел в вашей модели на случай.

scope :filter_by_category, -> (category) { where category: category) }

Затем используйте прицел в вашем контроллере или представлении:

Incidental.filter_by_category("bath")

Incidental.filter_by_category("electro")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...