Как можно принять решение на основе нескольких моделей в Rails? - PullRequest
0 голосов
/ 07 января 2020

У меня есть три модели project_site, project_manager и human_resource. каждая модель имеет логический атрибут состояния. Я хочу печатать «утверждать», только если все статусы == истина, но хочу печатать «отклонять», если для любого из состояний установлено значение «ложь». каждый статус по умолчанию имеет значение nil.

        <% if project_site.human_resources.empty? %>
              <td class="pending fi-eye"><%= " Pending" %></td>
            <% elsif %>
              <% project_site.human_resources.each do |human_resource| %>
                <% if human_resource.status == false %>
                  <td class="rejected fi-x"><%= ' Rejected' %></td>
                <% elsif human_resource.status == true %>
                  <td class="approved fi-check"><%= " Approved" %></td>
                <% end %>
              <% end %>

              <% elsif %>
                <% project_site.project_directors.each do |project_director| %>
                  <% if project_director.status == false %>
                    <td class="rejected fi-x"><%= ' Rejected' %></td>
                  <% end %>
                <% end %>

                <% elsif %>
                  <% project_site.project_managers.each do |project_manager| %>
                    <% if project_manager.status == false %>
                      <td class="rejected fi-x"><%= ' Rejected' %></td>
                    <% end %>
                  <% end %>
            <% end %>

1 Ответ

0 голосов
/ 07 января 2020

Попробуйте что-то вроде:

is_approved = project_site.human_resources.all?{|e| e.status } # or .all?(&:status) will check if status true for all records

Вы даже можете упростить

all_approved = (project_site.project_managers +  project_site.human_resources + project_site.project_directors).all?(&:status)

это не выглядит идеально, и я предлагаю перенести его на модель.

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