4

日付範囲内の created_by 属性を持つすべてのレコードを選択しようとしています:

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

しかし、postgres から次のようなエラーが表示されます。

PG::Error: ERROR:  syntax error at or near "T00"
LINE 1: ...M "registrations"  WHERE (created_at >= 2013-06-01T00:00:00+...

これで検索してるんだけど、今度はGoogleが来ない…

4

4 に答える 4

13

私の意見では、最良の方法は、次のようにwhere節でrange を使用することです。

Registration.where(created_at: @start..@end)

@startおよびはクエリ@endで既に型キャストされているため、このクエリも SQL インジェクションの影響を受けにくくなりDateTimeます。

于 2013-06-05T19:40:09.547 に答える
2

次のようにクエリ パラメータをバインドしてみてください。

@registrations = Registration.where "created_at >= ? AND created_at <= ?",
                                    params[:start].to_datetime,
                                    params[:end].to_datetime

これにより、SQL インジェクション攻撃を防ぐのに役立つ方法でパラメーターをバインドできます。

于 2013-06-05T19:36:30.937 に答える
0
@start = params[:start].to_datetime
@end = params[:end].to_datetime
@registrations = Registration.where(created_at: @start..@end)
于 2013-06-05T19:40:15.723 に答える
-1
@start = params[:start].to_datetime
@end = params[:end].to_datetime
@registrations = Registration.where("created_at >= '#{@start}' and created_at <= '#{@end}'")
于 2013-06-05T19:36:31.263 に答える