与枚举匹配的Rails Arel表的“ Where”查询(如何将查询强制为类型文本)

时间:2018-08-07 00:33:19

标签: sql ruby-on-rails ruby activerecord arel

我正在尝试使用arel表来匹配表中与正则表达式匹配的列的所有实例。这对于字符串很容易起作用,但是当搜索字段是枚举时,它将不起作用。

我查询数据库的代码如下:

res = Test::Table
arel_tbl = res.arel_table["spec_type"].parameterize.underscore.to_sym
res = res.where(arel_tbl.matches("%#NewProd%"))

因此,使用上述代码,如果我的“ spec_type”列包含字符串类型的值,则查询有效,但在我的实例中,该列下的所有值均为枚举,因此我需要将其转换为文本以与常规进行比较表达。

以这种方式工作的ActiveRecord查询示例如下所示:

Test::Table.where("spec_type::text like '%NewProd%'")

所以该查询之所以有效,是因为我将spec_type强制为text类型,从而允许我的SQL查询针对正则表达式调用LIKE。我如何通过Arel表获得相同的功能?我想要arel表,因为它会自动引用我的数据。

0 个答案:

没有答案