【问题标题】:Rails 4.2 - Is the last record's #created_at more than 1 day old?Rails 4.2 - 最后一条记录的#created_at 是否超过 1 天?
【发布时间】: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

我最近的医疗记录日期是 2017 年 12 月 17 日

我最近的 PersonalCare 日期是 2017 年 12 月 21 日

这是我不久前构建的,我曾经认为像 object.created_at &lt;= 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


    【解决方案1】:

    简单的self.personal_care_forms.last.created_at &lt; 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多