Ruby on rails 我想计算状态为批准的两个日期的假期

Ruby on rails 我想计算状态为批准的两个日期的假期,ruby-on-rails,ruby-on-rails-5,Ruby On Rails,Ruby On Rails 5,我想计算状态已批准的两个日期的假期,但不知道如何计算您的代码有几个问题: taked_leaves的范围不限于单个员工:您正在迭代所有员工的假期 休假日期被多次覆盖。初始值([])从未使用过,每个块中设置的任何值也从未使用过(直到最后一个)。然后,该值用于更新employee.availed\u leaves 简而言之,您只查看一次休假(可能属于另一名员工),而不是只查看该员工的所有休假,从而更新员工的可用休假 假设您在员工模型定义中有has\u many:leaves,您可以这样重写此代码

我想计算状态已批准的两个日期的假期,但不知道如何计算

您的代码有几个问题:

  • taked_leaves
    的范围不限于单个员工:您正在迭代所有员工的假期
  • 休假日期
    被多次覆盖。初始值(
    []
    )从未使用过,每个
    块中设置的任何值也从未使用过(直到最后一个)。然后,该值用于更新
    employee.availed\u leaves
简而言之,您只查看一次休假(可能属于另一名员工),而不是只查看该员工的所有休假,从而更新员工的可用休假

假设您在
员工
模型定义中有
has\u many:leaves
,您可以这样重写此代码:

leave\u taked=employee.leaves。
选择('leaves.*(leaves.end\u date-leaves.start\u date)作为持续时间)。
其中(状态:“已批准”,开始日期:开始日期..结束日期)
可用休假=员工。允许休假-休假。总和(:持续时间)
注意:除非您正在覆盖
Leave
模型上的属性以产生副作用,否则您不需要当前代码中的所有
self.
s

 def calculate_availed_leave
  if self.saved_change_to_status? && self.status == "Approved"
   leave_start_date = self.start_date
   leave_end_date = self.end_date
   leave_date = []
   taken_leaves = Leave.includes(:employee).where(status: "Approved" ).where(start_date:leave_start_date..leave_end_date)
   taken_leaves.each do |leave|
     leave_date =   leave.end_date - leave.start_date  
   end
  availed_leaves = self.employee.allowed_leaves - leave_date
  self.employee.update(availed_leaves: availed_leaves)
end