You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Rails中对单列多值使用ILIKE查询

在Rails中用ILIKE实现多值相似匹配的方案

嘿,这个需求挺常见的,我来给你分享两种实用的实现方式:

方案一:用Arel优雅构造查询(推荐)

Arel是Rails底层的查询构造器,能帮你避开手写复杂SQL的麻烦,还能适配不同数据库:

# 定义需要匹配的关键词数组
keywords = ["Arvind Oasis", "Rajkumar Jindal City"]

# 为每个关键词生成一个ILIKE匹配条件,再用OR合并所有条件
match_conditions = keywords.map do |keyword|
  Project.arel_table[:name].matches("%#{keyword}%")
end.inject(:or)

# 执行最终查询
Project.where(match_conditions)

matches方法在PostgreSQL中默认会生成ILIKE(不区分大小写),如果是MySQL等其他数据库,可能需要微调配置,但PostgreSQL环境下直接用就没问题。

方案二:手动构建参数化SQL(灵活可控)

如果你更习惯直接写SQL片段,也可以用参数化查询的方式——一定要注意参数化,避免SQL注入风险:

keywords = ["Arvind Oasis", "Rajkumar Jindal City"]

# 生成占位符字符串,比如"name ILIKE ? OR name ILIKE ?"
sql_conditions = keywords.map { "name ILIKE ?" }.join(" OR ")

# 把每个关键词加上通配符作为参数传入
Project.where(sql_conditions, *keywords.map { |kw| "%#{kw}%" })

这种方式直观易懂,适合简单场景,参数化的写法能确保查询的安全性。

两种方法最终都会生成类似这样的SQL语句:

SELECT "projects".* FROM "projects" WHERE ("projects"."name" ILIKE '%Arvind Oasis%' OR "projects"."name" ILIKE '%Rajkumar Jindal City%')

内容的提问来源于stack exchange,提问作者Rajkumar Ulaganadhan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 07:41:14