使用Rails 4和PostgreSQL,查询日期范围的最简单方法是什么?

4

我正在尝试选择创建者属性在日期范围内的所有记录:

@start = params[:start].to_datetime
@end = params[:end].to_datetime
@registrations = Registration.where("created_at >= #{ @start } and created_at <= #{ @end }")

但是我从PostgreSQL得到了一个错误,错误信息如下:
PG::Error: ERROR:  syntax error at or near "T00"
LINE 1: ...M "registrations"  WHERE (created_at >= 2013-06-01T00:00:00+...

我一直在搜索这个问题,但这次谷歌没有给出答案...

4个回答

13
在我看来,最好的方法是在where子句中使用范围(range)操作,如下所示:
Registration.where(created_at: @start..@end)

由于在您的查询中,@start@end 已经被转换为 DateTime 类型,因此此查询也不容易受到 SQL 注入攻击。


2
尝试像这样绑定查询参数:
@registrations = Registration.where "created_at >= ? AND created_at <= ?",
                                    params[:start].to_datetime,
                                    params[:end].to_datetime

这允许您以一种有助于防止SQL注入攻击的方式绑定参数。


0
@start = params[:start].to_datetime
@end = params[:end].to_datetime
@registrations = Registration.where(created_at: @start..@end)

-1
@start = params[:start].to_datetime
@end = params[:end].to_datetime
@registrations = Registration.where("created_at >= '#{@start}' and created_at <= '#{@end}'")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接