【发布时间】:2017-12-22 02:18:27
【问题描述】:
我有几个类需要每天创建的记录/对象才能在我的应用程序中被视为“最新”。
以下是我用来确定最近创建的最新记录的方法。
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
我最近的 PersonalCare 日期是 2017 年 12 月 21 日
这是我不久前构建的,我曾经认为像 object.created_at <= 1.day_ago 这样简单的东西对于任何不到 1 天的日期都会返回 true。
我使用的是 postgresql 21 及以下是我的时区配置:
在控制台中运行它们的内部时,我可以让这些方法工作,所以我认为这可能是一个时区转换问题。
但是我已经尝试了很多方法来帮助处理时区和其他场景,例如 begin_of_day、::time 和 :to_i 来计算已经过去的小时数,如果小于 24 比记录是“最新”,超过 24 小时。
我还将包括我的观点,以防我有什么倒退的地方。
medical_record sn-p:
<% 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 sn-p:
<% 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 仍然没有发现我今天也创造了新记录。我可以重建数据库,因为这不是生产数据的问题。
非常感谢调试提示,因为它帮助我更轻松地推理。
【问题讨论】:
标签: datetime ruby-on-rails-4 time comparison