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
这是我之前建立的东西,我曾经认为像object.created_at <= 1.day_ago
这样简单的东西会在不到1天的任何日期返回。
我正在使用postgresql 21及以下是我的时区配置:
我可以在控制台中运行内部时使用这些方法,所以我认为这可能是时区转换问题。
但我已经尝试了很多方法来帮助处理时区和其他场景,例如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天?的主要内容,如果未能解决你的问题,请参考以下文章
使用 Rails 4.2 和 lograge,如何在每个记录的行之前启用日期/时间?
Laravel leftJoin 只加入右表的最后一条记录并按它排序