Rails 4.2 - 最后一条记录的#created_at是否超过1天?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Rails 4.2 - 最后一条记录的#created_at是否超过1天?相关的知识,希望对你有一定的参考价值。

我有几个类需要每天创建的记录/对象在我的应用程序中被视为“最新”。

以下是我用来确定最新记录创建时间的方法。

class Resident < ActiveRecord::Base
  .
  .
  .
  def medical_record_expired?
    if self.medical_record_forms.last.created_at::time <= 1.day.ago
      true
    else
      false
    end
    # ((Time.current - self.medical_record_forms.last.created_at)/3600).to_i
  end

  def personal_care_log_expired?
    if self.personal_care_forms.last.created_at::time <= 1.day.ago
      true
    else
      false
    end
    # ((Time.current - self.personal_care_forms.last.created_at)/3600).to_i
  end
end

我最新的医疗记录日期是12/17/2017 MedicalRecord visual

我最新的PersonalCare日期是12/21/2017 enter image description here

这是我之前建立的东西,我曾经认为像object.created_at <= 1.day_ago这样简单的东西会在不到1天的任何日期返回。

我正在使用postgresql 21及以下是我的时区配置:

enter image description here

我可以在控制台中运行内部时使用这些方法,所以我认为这可能是时区转换问题。

但我已经尝试了很多方法来帮助处理时区和其他场景,例如begin_of_day,:: time和:to_i来计算已经过去的小时数,如果小于24小时,那么记录是'up-到目前为止,超过24小时。

我还会包括我的意见,以防我在那里有一些倒退。

medical_record代码段:

<% if resident.medical_record_expired? %>
  <td class="text-center move-row">
    <label class="label label-danger">
      Record outdated, 
      <%= link_to "<span class='pad-all text text-lg text-primary'>click here</span>".html_safe, new_resident_medical_record_form_path(resident.id) %>
      to create.
    </label>
  </td>
<% else %>
  <td class="text-center move-row">
    <label class="label label-table label-success">Up to date!</label>
  </td>
<% end %>

personal_care_logs片段:

<% if resident.personal_care_log_expired? %>
  <td class="text-center move-row">
    <label class="label label-danger">
      Record outdated, 
      <%= link_to "<span class='pad-all text text-lg text-primary'>click here</span>".html_safe, new_resident_personal_care_form_path(resident.id) %>
      to create.
    </label>
  </td>
<% else %>
  <td class="text-center move-row">
    <label class="label label-table label-success">Up to date!</label>
  </td>
<% end %>

我有兴趣学习我忽略/误用的东西,阻止我达到这个目的。

12/26/17更新

按照下面列出的步骤,我能够确定只有一个居民和他的嵌套关联resident.personal_care_forms.last存在这个问题。尽管最新记录是在今天(12月26日)创建的,但最后一个created_at是在几天前(12月21日)打印的。

当试图为其他居民添加新的personal_care_forms时,条件会按照预期以最新的created_at日期记录。

我不确定为什么原来的resident.personal_care_forms.last仍然没有拿起我今天也创造了一个新纪录。我可以重建数据库,因为这不是生产数据的问题。

非常感谢调试提示,因为它帮助我更轻松地推理。

答案

简单的self.personal_care_forms.last.created_at < 1.day.ago应该在控制台和应用程序中工作和行为相同。

尝试将日志添加到您的Resident类中(注意我也折叠了布尔返回)并查看您获得的内容:

class Resident < ActiveRecord::Base
  .
  .
  .
  def medical_record_expired?
    puts "created_at: #{medical_record_forms.last.created_at} 1.day.ago: #{1.day.ago}"
    self.medical_record_forms.last.created_at < 1.day.ago
  end

  def personal_care_log_expired?
    puts "created_at: #{personal_care_forms.last.created_at} 1.day.ago: #{1.day.ago}"
    self.personal_care_forms.last.created_at < 1.day.ago
  end
end

以上是关于Rails 4.2 - 最后一条记录的#created_at是否超过1天?的主要内容,如果未能解决你的问题,请参考以下文章

Extjs 4.2 可排序网格,一条记录的位置固定

使用 Rails 4.2 和 lograge,如何在每个记录的行之前启用日期/时间?

Eloquent 获取按日期分组的最后一条记录

Laravel leftJoin 只加入右表的最后一条记录并按它排序

复杂Rails Active Record查询选择具有真实结果的记录,以便当天最新更新其他创建的记录

Django按时间序列中的ID过滤和选择每个月的最后一条记录的方法?