如何按 rails 中的日期范围查找出勤率?

how to find attendance by date range in rails?

manpowerattendance

有 one_to_many 关联

invoice table 具有属性 from_dateto_date

attendance_table 具有属性 statusmanpower_id 和 attendance_date。

我能够在发票#index 上提供所有人力。 但我不知道如何计算每个人力的出勤率并将它们显示在列中,同时不考虑发票 table 的持续时间。
出席 table 1 人出席。并且 0 不存在。

<table>
  <thead>
    <tr>
      <th>Name</th>
      <th>total present</th>
      <th>Total Abesent</th>
    </tr>
  </thead>
  <tbody>
    <% @manpowers.each do |manpower| %>
    <tr>
      <td><%= manpower.name %></td>
      <td><%= "" %></td>
      <td><%= "" %></td>
    </tr>
    <% end %>
  </tbody>
</table>

目前 - manpower.attendance.where(attendance_date: from_date..to_date, status: 1).count

缺席 - manpower.attendance.where(attendance_date: from_date..to_date, status: 0).count

您可以在考勤模型中创建范围并在视图中使用它们。

class Attendance < ActiveRecord::Base
  scope :absent, where(status: 0)
  scope :present, where(status: 1)
  scope :date_between, -> (from_date, to_date) { where(attendance_date: from_date..to_date) }
end

并像

一样使用它

目前 - manpower.attendance.date_between(from_date, to_date).present.count

缺席 - manpower.attendance.date_between(from_date, to_date).absent.count

<table>
  <thead>
    <tr>
      <th>Name</th>
      <th>Total Present</th>
      <th>Total Absent</th>
    </tr>
  </thead>
  <tbody>
    <% @manpowers.each do |manpower| %>
      <tr>
        <td><%= manpower.name %></td>
        <td><%= manpower.attendance.date_between(from_date, to_date).present.count %></td>
        <td><%= manpower.attendance.date_between(from_date, to_date).absent.count %></td>
      </tr>
    <% end %>
  </tbody>
</table>