私はアプリケーション内で「最新」とみなされるために毎日作成されたレコード/オブジェクトを必要とするいくつかのクラスを持っています。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
私の最新MedicalRecordの日付が2017年12月17日
私の最新PersonalCareの日付が2017年12月21日
これは私がしばらく前に建てられたものだと私ですobject.created_at <= 1.day_ago
のような単純なものは、1日未満のいずれの日付でもtrueを返すと考えられていました。
私はPostgreSQLの21を使用し、以下の私のタイムゾーンの設定ですよ:
コンソールでその内部を実行しているとき、私は方法が仕事を得ることができますので、私は、これは時間がかかるかもしれない考え出し-zone変換の問題。
しかし、私は、タイムゾーンや、begin_of_day、:: time、to_iなどの他のシナリオを参考にして、レコードの24時間未満で経過したn時間を計算する方法を試しましたそれがそうでないよりも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
のために存在することを決定することができました。最後のcreated_atは、最新のレコードが今日作成されたにもかかわらず、(12/21)として印刷されました。(12/26)です。
他の居住者に新しいpersonal_care_forms
を追加しようとすると、条件付きで最新のcreated_at
の日付が予想どおりにプルされます。
私はまだ元のresident.personal_care_forms.last
がまだ私は新しいレコードを作成したことをまだ拾っていないのか分かりません。私は生産データの問題ではないので、私はdbを再構築することができます。
デバッグのヒントをいただきありがとうございました。