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

时间:2017-12-22 02:18:27

标签: datetime ruby-on-rails-4 time comparison

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

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

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

我最近的医疗记录日期是2017年1月17日 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小时,则记录是'最新',超过24小时。不过。

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

medical_record snippet:

<% 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及其嵌套关联resident.personal_care_forms.last存在此问题。最后一个created_at在几天前打印(12/21),即使最新记录是今天创建的(12/26)

尝试为其他居民添加新的personal_care_forms时,条件会按预期将最近的created_at日期拉到记录中。

我不确定为什么原来的resident.personal_care_forms.last仍然没有接受我今天创建的新唱片。我可以重建db,因为这不是生产数据的问题。

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

1 个答案:

答案 0 :(得分:1)

简单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