2017-12-22 45 views
0

私はアプリケーション内で「最新」とみなされるために毎日作成されたレコード/オブジェクトを必要とするいくつかのクラスを持っています。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日 MedicalRecord visual

私の最新PersonalCareの日付が2017年12月21日 enter image description here

これは私がしばらく前に建てられたものだと私ですobject.created_at <= 1.day_agoのような単純なものは、1日未満のいずれの日付でもtrueを返すと考えられていました。

私はPostgreSQLの21を使用し、以下の私のタイムゾーンの設定ですよ:

enter image description here

コンソールでその内部を実行しているとき、私は方法が仕事を得ることができますので、私は、これは時間がかかるかもしれない考え出し-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を再構築することができます。

デバッグのヒントをいただきありがとうございました。

答えて

1

簡易self.personal_care_forms.last.created_at < 1.day.agoは、コンソールとアプリで同じように動作し、同じように動作するはずです。

このようなあなたの居住者クラスにログを追加してみてください(私もブールリターンを崩壊していることに注意してください)、あなたが取得しているものを参照してください。

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 
関連する問題