0

デフォルトのcreated_at Railsフィールドを使用して、時間範囲にのみ含まれるレコードを取得する必要があります。作成された日は関係ありません。

私はこれを持っています:

@start_time = test.start_time.strftime("%I:%M%p")
@end_time test.end_time.strftime("%I:%M%p")
@websites = device.websites.where(:created_at => @start_time..@end_time)

私はこのようなものを探していました:

@websites = device.websites.where(:created_at::time => @start_time..@end_time)

これにより、結果のないこの SQL 文が生成されます。

SELECT DISTINCT `websites`.* FROM `websites` WHERE `websites`.`device_id` = 2 AND (`websites`.`created_at` BETWEEN '16:10:00' AND '21:10:00')

しかし、created_at フィールドに時間関数を追加すると、正常に動作します。

SELECT DISTINCT `websites`.* FROM `websites` WHERE `websites`.`device_id` = 2 AND (time(`websites`.`created_at`) BETWEEN '16:10:00' AND '21:10:00')

これを行うための最良のRailsの方法は?

4

1 に答える 1

1

Rails は時間オブジェクトをデータベースが必要とする形式に自動的に変換するため、strftime は必要ありません。次のようにできるはずです。

@websites = device.websites.where(:created_at => test.start_time..test.end_time)
于 2013-07-19T00:45:20.830 に答える