你很少需要下降到在軌撰寫原始SQL(例如,使用find_by_sql
方法) - 尤其是對於這樣一個簡單的查詢,因爲這。
相反,你可以像下面和ActiveRecord
將正確地將其轉換爲有效的SQL語法您:
# If you are looking for a list of all matching entries:
Policy.where(acct_ent_date: start_date..end_date)
# If you only wish to fetch the FIRST matching entry:
Policy.find_by(acct_ent_date: start_date..end_date)
這將生成SQL類似如下:
SELECT `policies`.* FROM `policies` WHERE (`policies`.`acct_ent_date` BETWEEN xxxxx AND yyyyy)
的關鍵問題與您的原始(原始SQL)代碼是,您使用的語法是WHERE IN
- 對於多個OR條件,這實際上只是shorthand。由於這不是離散列表(即Array
),因此與Range
(start_date..end_date
)對象一起使用是沒有意義的。
如果你要嘗試將對象轉換成一個數組,你會看到一個錯誤這樣的:
(start_date..end_date).to_a # => TypeError: can't iterate from Time
你正在編譯什麼查詢? –