1

テーブルにデータがあるのに、db クエリが空を返すのはなぜですか?

Event.all

戻り値

...
Event Load (0.3ms)  SELECT "events".* FROM "events"
 => #<ActiveRecord::Relation [#<Event id: 1, created_at: "2013-08-01 12:27:36", updated_at: "2013-08-01 12:27:36"> 
...

等、

その間

Event.where(created_at: Date.today)

私にくれます

Event Load (0.3ms)  SELECT "events".* FROM "events" WHERE "events"."created_at" = '2013-08-01'
 => #<ActiveRecord::Relation []> 

すべてはどこにありますか?

4

3 に答える 3

3

フィールドcreated_at は DateTimeですが、 Date (時間なし)と比較しています。今日作成されたすべてのイベントを取得するには、フィールドを日付としてキャストする必要があります。

Event.where('CAST(events.created_at as DATE) = ?', Date.today)

注意: 構文は、データベース システム (PostGreSQL / MySQL など) によって異なる場合があります。

お役に立てれば!

便利なリンク:

于 2013-08-01T13:56:50.593 に答える
0

問題は、created_at: 属性 (移行タイムスタンプで作成されたと仮定) にも時刻が格納されることです。したがって、単純な日付と同じになることはありません。最良の選択肢は、日付を解析してから比較することです。

于 2013-08-01T13:59:30.637 に答える
0

実際のクエリを見ると -

SELECT "events".* FROM "events" WHERE "events"."created_at" = '2013-08-01'

created_at equals を持つレコードを探しています2013-08-01が、実際には、検索しようとしているレコード -created_atフィールド equals です2013-08-01 12:27:36

created_atステートメントを変更して、次を含む検索を行います 2013-08-01

于 2013-08-01T13:57:04.643 に答える