首页 > 解决方案 > Ruby Sequel 和模式数组

问题描述

我有一组用于 ILIKE 的模式,一个带有其他过滤器的现有数据集,我想将它添加到其中。

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

我使用 Postgres,所以在 SQL 中我会做类似的事情AND field ILIKE ANY('abc%', ...),但是如何实现(或类似的事情,比如 dynamic AND (field ILIKE 'abc' OR field ILIKE 'bcd')?Sequel 的理想解决方案是什么?

谢谢!

标签: rubysequel

解决方案


以下任何一项都应该有效

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

就我个人而言,我更喜欢前者,但如果你控制其中的内容,ary那么任何一个都应该毫无问题地执行。


推荐阅读