我想使用示例查询字符串从我的rails应用程序查询我的psql数据库:
select * from venues where upper(regexp_replace(postcode, ' ', '')) = '#{postcode}' or name = '#{name}'
此查询有两个方面:
upper
和regexp_replace
)进行比较,我可以在活动记录中进行比较or
条件我很感激帮助将这些加在一起。
答案 0 :(得分:1)
查看squeel,它可以以非常友好的方式处理OR
查询和函数:https://github.com/activerecord-hackery/squeel& http://railscasts.com/episodes/354-squeel
例如:
[6] pry(main)> Page.where{(upper(regexp_replace(postcode, ' ', '')) == 'foo') | (name == 'bar')}.to_sql
=> "SELECT \"pages\".* FROM \"pages\" WHERE upper(regexp_replace(\"pages\".\"postcode\", ' ', '')) = 'foo'"
替代方法是直接对查询进行编码:
scope :funny_postcode_raw, lambda{ |postcode, name| where("upper(regexp_replace(postcode, ' ', '')) = ? or name = ?", postcode, name) }
我不建议去Arel路径,99.9%的时间不值得
注意:squeel的OR运算符是|