2013-06-05 20 views
3

我試圖用的日期範圍CREATED_BY屬性來選擇所有記錄:使用Rails 4和Postgres在一個範圍內查詢日期的最簡單方法是什麼?

@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+... 

我一直在尋找這個一個,但谷歌不會通過這一次來了...

回答

12

的最佳方式,在我看來,將使用範圍where子句:

Registration.where(created_at: @[email protected]) 

這個查詢不會容易出現SQL注入,因爲相關@start@end在已經類型強制轉換DateTime在您的查詢中。

2

嘗試綁定查詢參數是這樣的:

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

這允許您以幫助防止SQL注入攻擊的方式綁定參數。

-1
@start = params[:start].to_datetime 
@end = params[:end].to_datetime 
@registrations = Registration.where("created_at >= '#{@start}' and created_at <= '#{@end}'") 
0
@start = params[:start].to_datetime 
@end = params[:end].to_datetime 
@registrations = Registration.where(created_at: @[email protected]) 
相關問題