我有一個模型,租賃,屬性為ends_on(日期)和notice_days(整數) 我想撰寫一個查詢,回傳ends_on 日期小于今天的日期加上該記錄的notice_days 的所有記錄。在直接 SQL(對于我的 Postgresql 資料庫)中,查詢是:
SELECT * FROM leases WHERE ends_on < CURRENT_DATE notice_days
我可以很容易地寫一個查詢來比較今天的日期 一些固定的緩沖區
Lease.where(ends_on: ...Date.current 30).all
但我不想要固定緩沖區,我想要每個記錄唯一的緩沖區(notice_days)。
我確實意識到我可以使用 exec_sql 執行上面顯示的 sql,但我想學習如何使用簡單的 ActiveRecord 查詢來執行此操作。
編輯
Stefanyuk 下面的回答確實回答了我的問題,但我正在尋找一種方法來撰寫 ActiveRecord 查詢,其中鍵值對作為 where 方法的引數,以期使查詢對資料庫的依賴性降低。似乎這應該是可能的,但我嘗試了很多方法來傳遞屬性名稱,但沒有成功。
這不起作用,但我正在尋找類似的東西:
Lease.where(ends_on: ...(Date.current :notice_days))
有沒有辦法用對屬性notice_days 的參考替換該示例中的符號:notice_days?
uj5u.com熱心網友回復:
您可以使用interval
SELECT * FROM leases WHERE ends_on < CURRENT_DATE interval '1 day' * notice_days
或與Rails
Lease.where("ends_on < CURRENT_DATE interval '1 day' * notice_days")
或與Arel
Lease.where(Lease.arel_table[:ends_on].lt(Arel.sql("CURRENT_DATE notice_days")))
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/489659.html
