[英]Activerecord: how to query using find_by_sql and include with a variable
我正在嘗試通過activerecords使用find_by_sql從3個表中查詢
date = '2014-12-14'
bills_with_sms = ActualBill.find_by_sql("SELECT * FROM users u LEFT JOIN bills b ON u.id=b.user_id LEFT JOIN actual_bills ab ON b.id= ab.bill_id WHERE u.total_sms_count > 0 AND b.want_sms= true AND date = ANY (ab.sms_reminder_schedule) AND ab.paid = false AND b.active = true")
但是,運行此代碼時,它將顯示此錯誤消息
PG::UndefinedColumn: ERROR: column "date" does not exist
LINE 1: ...E u.total_sms_count > 0 AND b.want_sms= true AND date = ANY...
我嘗試使用Rails控制台進行調試,如果我將日期更改為“ 2014-12-14”,它將給出正確的查詢,因此代碼為
bills_with_sms = ActualBill.find_by_sql("SELECT * FROM users u LEFT JOIN bills b ON u.id=b.user_id LEFT JOIN actual_bills ab ON b.id= ab.bill_id WHERE u.total_sms_count > 0 AND b.want_sms= true AND '2014-12-14' = ANY (ab.sms_reminder_schedule) AND ab.paid = false AND b.active = true")
有人可以告訴我從數組查詢的正確方法是什么? sms_reminder_schedule是字符串數組。 我想查找當天計划發送短信的賬單。
謝謝
SELECT * FROM users u LEFT JOIN bills b ON u.id=b.user_id LEFT JOIN actual_bills ab ON b.id= ab.bill_id WHERE u.total_sms_count > 0 AND b.want_sms= true AND '#{date}' = ANY (ab.sms_reminder_schedule) AND ab.paid = false AND b.active = true
這里發生的是PG無法找到列日期,我認為該日期是您要與變量date
定義的ANY
比較匹配的表達式
您可以像Marek建議的那樣使用字符串插值,例如#{var}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.