我有几个类需要每天创建一个记录/对象,以便在我的应用程序中被认为是“最新的”。
以下是我用来确定最新记录创建时间的方法。
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年12月17日
我最近的个人护理日期是2017年12月21日
这是我不久前建立的东西,我过去认为
object.created_at <= 1.day_ago
对于任何小于1天的日期,都将返回true。
我正在使用postgresql 21,下面是我的时区配置:
我可以在控制台中运行这些方法的内部构件,因此我认为这可能是一个时区转换问题。
但我已经尝试了很多有助于时区和其他场景的方法,例如开始\u of\u day、::time和:to\u I来计算已经过去的小时数,如果小于24小时的记录是“最新的”,则超过24小时。
我还将包括我的观点,以防我有什么倒退。
medical\u记录片段:
<% 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\u care\u日志片段:
<% 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 %>
我有兴趣了解我忽视/误用了哪些东西,这些东西阻碍了我达到这一目的。
2017年12月26日更新
按照下面概述的步骤,我能够确定只有一个居民及其嵌套关联存在此问题,
resident.personal_care_forms.last
. 上次创建的\u在几天前正在打印
(12/21)
,即使最新的记录是今天创造的
(12/26)
.
尝试添加新时
personal_care_forms
对于其他居民来说,有条件的最新记录
created_at
日期如预期。
我不知道为什么
居民personal\u care\u表单。最后的
我今天也创造了一个新记录,但仍然没有意识到这一点。我可以重建数据库,因为这不是生产数据的问题。
非常感谢调试提示,因为它帮助我更轻松地进行推理。