Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
278 views
in Technique[技术] by (71.8m points)

Ruby Sequel and array of patterns

I have an array of patterns for use with ILIKE, an existing dataset with other filters, and I want to add it to that.

patterns = ['abc%', 'bcd', '%cde', ...]

I use Postgres, so in SQL I would do something like AND field ILIKE ANY('abc%', ...), but how to achieve that (or something similar, like dynamic AND (field ILIKE 'abc' OR field ILIKE 'bcd')? What would be the ideal solution with Sequel?

Thank you!

question from:https://stackoverflow.com/questions/66051963/ruby-sequel-and-array-of-patterns

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

Either of the following should work

where(ary.map {|val| Sequel.ilike(:column_name, val)}.reduce(&:|))
#or
where(Sequel.lit("table_name.column_name ILIKE ANY(#{ary.map(&:inspect).join(',')})"))

Personally I would prefer the former but if you control the contents of ary then either should perform without issue.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...