首页 > 解决方案 > 如何在 Rails 中基于多个模型做出决策?

问题描述

我有三个模型 project_site、project_manager 和 human_resource。每个模型都有状态布尔属性,我只想在所有状态==true 时打印“批准”,但如果任何一个状态设置为 false,我想打印“拒绝”。默认情况下,每个状态都有 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 %>

标签: ruby-on-railsruby

解决方案


尝试类似:

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)

它看起来并不完美,我建议将其移至模型中。


推荐阅读