Date
単純な 'olオブジェクトの大きな問題は、時間情報が含まれていないことです。したがって、現在のクエリでは、クエリが次のように解決されるため、指定された日付の前にすべてを取得することになりますWHERE created_at <= '2013-09-27'...
。レコードを失うことなくこの問題を回避する方法の 1 つは、次のように日付オブジェクトに 1 日を追加することです。
def total_by_date(my_date)
where{created_at <= (my_date + 1.day)}.count
end
この方法でも、タイムゾーンについてまったく心配する必要はありません。日付部分を見ているだけです。
**編集**
コメントであなたの質問に答えて:
なぜ+ 1.day
機能するかについては、次のような日付を考えてみてください。クエリのmy_date
ように見え2013-09-24
ますが、基本的には と同じ2013-09-24 00:00:00
です。これは、9 月 24 日の午前 0 時に設定された日時/タイムスタンプと同じです。したがって、平易な英語で言えば、「9 月 24 日の午前 0 時までにすべてを教えてください」という比較であれば、到達するすべての結果が得られます。その特定の日時より前に存在するものはありますが、9 月 24 日の後半に発生したものは表示されません。
したがって、+ 1.day
同じ「問題」が依然として存在しますが、クエリが「9 月 25 日午前 0 時またはそれ以前の何か」であるため、現在は有利に機能しています。
注:技術的には、たまたま 9 月 25 日の真夜中に作成されたものに対して望ましくない一致が発生する可能性がありますが、その問題を修正する<
代わりに単純に比較を簡単に変更できます。<=