簡體   English   中英

ActiveRecord:如何使用find_by_sql查詢並包含變量

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM