ruby-on-rails - 如何在 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 %>
解决方案
尝试类似:
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)
它看起来并不完美,我建议将其移至模型中。
推荐阅读
- html - 如何防止将 className 和样式道具传递给 React 中的组件
- javascript - 实时音频流媒体流媒体时奇怪的节奏静态
- flutter - 参数 'image' 的值不能为 'null' 因为它的类型,但隐含的默认值是 'null'
- python - python pygame水平移动图片
- google-apps-script - 如何解决谷歌表格中IMPORTRANGE公式的限制?
- swift - 子类化 NSView 以通知 ViewController 动作
- php - 限制 Woocommerce 购物车中免费产品的最大数量
- debugging - 将 shellcode 放入简单程序的问题
- prisma - 如何在 prisma 中使用自定义名称而不是 _count
- spring - 用于将文件上传到 S3 的 Spring Boot 批处理