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

Rails Controller查询Article表含指定域名的link字段报错如何解决?

错误原因

你遇到的报错是因为where方法的字符串参数会被直接作为SQL片段提交给数据库执行,你写的link.includes?是Ruby字符串的方法,不属于PostgreSQL支持的SQL语法,数据库会将其解析为「查询link表的includes?字段」,自然会抛出找不到link表的错误。

正确实现方案

  • 基础SQL LIKE 写法(兼容所有Rails版本,自带SQL注入防护)
@featured = Article.where("link LIKE ?", "%example.com%")

%是SQL的通配符,代表0个或多个任意字符,?是参数占位符,Rails会自动对传入的内容做转义处理,避免SQL注入风险。

  • 大小写不敏感匹配(适合URL大小写不统一的场景)
    如果需要匹配Example.com、EXAMPLE.COM这类大小写不同的内容,可以用PostgreSQL特有的ILIKE操作符:
@featured = Article.where("link ILIKE ?", "%example.com%")
  • 无原生SQL的Arel写法(兼容性更强,支持多数据库适配)
    如果你不想手写SQL片段,可以用Rails内置的Arel查询构造器实现:
link_field = Article.arel_table[:link]
@featured = Article.where(link_field.matches("%example.com%"))

注意事项

如果需要避免误匹配到example.com.cn、aexample.com这类包含目标域名但不属于目标站点的内容,可以根据你存储的URL格式调整通配符规则,比如存储的是完整带协议的URL,可以写成%//example.com/%精准匹配域名作为主机的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 04:27:03