Ruby on rails ruby检查当前日期是否在日期记录内

Ruby on rails ruby检查当前日期是否在日期记录内,ruby-on-rails,ruby,Ruby On Rails,Ruby,假设我有一个叫做缺席的模型,看起来像这样 :id => :integer, :employee_id => :integer, :start_date => :date, :end_date => :date 我需要检查员工今天是否外出,如果外出,则返回true。如果某人有缺席记录,那么他就不在了 开始日期为今天或今天之前, 其结束日期要么为空,要么为今天或早于今天。 所以我需要一个关于雇员的方法 def is_away ????? end

假设我有一个叫做缺席的模型,看起来像这样

         :id => :integer,
:employee_id => :integer,
 :start_date => :date,
   :end_date => :date
我需要检查员工今天是否外出,如果外出,则返回true。如果某人有缺席记录,那么他就不在了

开始日期为今天或今天之前, 其结束日期要么为空,要么为今天或早于今天。 所以我需要一个关于雇员的方法

def is_away
  ?????
end
请帮忙

你也可以试试这个

def is_away?
  (start_date <= Date.today) and (end_date.nil? or end_date <= Date.today) ? true : false
end
你也可以试试这个

def is_away?
  (start_date <= Date.today) and (end_date.nil? or end_date <= Date.today) ? true : false
end

我会这样做:

# add this to absence.rb
def covers_today?
  (start_date..end_date).cover?(Date.today)
end

# add this to employee.rb
def away?
  absences.any?(&:covers_today?)
end
做完这件事后,你就给我打电话?关于雇员:


我会这样做:

# add this to absence.rb
def covers_today?
  (start_date..end_date).cover?(Date.today)
end

# add this to employee.rb
def away?
  absences.any?(&:covers_today?)
end
做完这件事后,你就给我打电话?关于雇员:

假设员工有很多缺勤,这应该可以:

def away?(date = Date.today)
  absences.where('start_date <= :date AND (end_date >= :date OR end_date IS NULL)', date: date).exists?
end
假设员工有很多缺勤,这应该可以:

def away?(date = Date.today)
  absences.where('start_date <= :date AND (end_date >= :date OR end_date IS NULL)', date: date).exists?
end

Gararth,如果你发现至少有一个答案是有用的,请考虑选择你最喜欢的一个。你尝试使用时间吗?现在为当前日期,与你的StaskDead和EnthDead属性进行比较?Gararth,如果你发现至少有一个答案是有用的,请考虑选择一个你最喜欢的。三元运算符在这里是无用的,因为你已经从你的第一个条件返回真或假,但是,否则,您的解决方案很好。它应该是end_date>=date.today。三元运算符在这里是无用的,因为您已经从第一个条件返回true或false,但否则,您的解决方案很好。它应该是end_date>=date.today。这不会迭代所有缺勤并逐个检查每个开始日期和结束日期吗?像Stefan的解决方案那样,用SQL进行查询不是更好吗?@Micha,你说得对。这将加载所有缺勤并对其进行检查。这比仅仅像Stefan那样检查是否存在要慢。但我敢肯定,如果你发现他不在,你会想展示更多关于他缺席数据范围的细节。或者你想展示他上次离开的时间。或者他今年休假了多少天。根据我的回答,不需要第二次数据库调用,但Stefans解决方案需要第二次查询。数据库查询通常比在内存中的一个小数组上进行迭代要慢得多。所以我想这要看情况了……这不是会反复检查所有缺勤情况,并逐个检查每个开始日期和结束日期吗?像Stefan的解决方案那样,用SQL进行查询不是更好吗?@Micha,你说得对。这将加载所有缺勤并对其进行检查。这比仅仅像Stefan那样检查是否存在要慢。但我敢肯定,如果你发现他不在,你会想展示更多关于他缺席数据范围的细节。或者你想展示他上次离开的时间。或者他今年休假了多少天。根据我的回答,不需要第二次数据库调用,但Stefans解决方案需要第二次查询。数据库查询通常比在内存中的一个小数组上进行迭代要慢得多。所以我认为这取决于……我认为这比目前为止的答案要好得多,因为它只需进行一次查询,就可以确定用户是否不在。而在其他答案中,您会重复每次缺勤,并检查用户是否在代码中外出。这应该通过一个简单的查询在数据库中完成。我认为这比目前为止的答案要好得多,因为它只需执行一个查询来确定用户是否外出。而在其他答案中,您会重复每次缺勤,并检查用户是否在代码中外出。这应该通过一个简单的查询在数据库中完成。