我有几个类需要每天创建一个记录/对象,在我的应用程序中被视为“最新”。
以下是我用来确定最新记录最近创建时间的方法。
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小时,则记录是'最新',超过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,因为这不是生产数据的问题。
非常感谢调试提示,因为它帮助我更轻松地推理。
答案 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