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

如何在Rails的ActiveRecord中实现列值被指定字符串包含的查询?

Rails ActiveRecord实现列值包含于指定字符串的查询

核心解决方案

直接用参数化的where语句即可对应你提供的SQL逻辑:

words = "new science fiction"
Book.where("? LIKE CONCAT('%', keyword, '%')", words)

关键说明

  • ?是ActiveRecord的安全参数占位符,会自动将words变量的值注入查询,完全避免SQL注入风险。
  • CONCAT('%', keyword, '%')会给keyword列的值前后拼接通配符%,实现「检查keyword是否是words子串」的逻辑,正好匹配你要的「列值被包含在指定字符串中」的查询需求。

替代写法(Arel面向对象方式,Rails 5+)

如果偏好纯面向对象的查询构建方式,可以用Arel实现:

words = "new science fiction"
keyword_column = Book.arel_table[:keyword]
Book.where(Arel::Nodes::InfixOperation.new('LIKE', Arel::Nodes.build_quoted(words), "%#{keyword_column}%"))

不过第一种字符串参数化写法已经足够简洁安全,日常开发中更常用。

效果验证

以你的示例场景测试:
当words = "new science fiction"时,keyword为'science'、'fiction'的Book记录会被匹配返回,'other'则不会,和你提供的原生SQL执行结果完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 01:00:48