Ruby / rails - hash Max by:key不返回最大值



我有一个查询,查找给定日期@s_date上的所有事件。

事件start_datetime在一天之内或者事件end_datetime在一天之内
@s_hash_items = @company.events.where('(start_datetime > ? AND start_datetime < ?) OR 
  (end_datetime > ? AND end_datetime < ?)', 
          @s_date.beginning_of_day, @s_date.end_of_day, 
          @s_date.beginning_of_day, @s_date.end_of_day)

我试图从这个数组中找到最新的end_datetime值。例如14:00,17:30,15:00有3个活动结束,我想17:30回来。但是,如果有一个事件运行到第二天,我希望最大结果为@s_date上的23:59:59)。

我的代码是这样的

   @s_end_hour = [@s_hash_items2.max_by{:end_datetime}.end_datetime, Time.now.end_of_day].sort.first.hour

因此,它生成一个数组,其中包含最近的结束日期时间和一天的结束时间,并选择较早的(sort.first),然后返回小时数,例如在本例中为17。

但是,max_by方法没有找到具有最新end_datetime的事件。它似乎根据@s_hash_items结果的顺序而变化。但是@s_hash_items的顺序不重要——我只想要最大值。我哪里做错了?谢谢。

这不是你想的那样:

@s_hash_items2.max_by{:end_datetime}

这就等于说:

@s_hash_items2.max_by { 11 }

。您要求max_by找到具有最大:end_datetime符号(常量)的元素,这有点毫无意义。

如果你想让max_by调用end_datetime方法,那么你需要一个块来返回对象的end_datetime值:

@s_hash_items2.max_by { |item| item.end_datetime }

或者更简洁地说(可能是你想说的):

@s_hash_items2.max_by(&:end_datetime)

在前面的第一个例子中,&或多或少把符号变成了{ |item| item.end_datetime }块。

最新更新