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

如何不使用迭代器查找符合属性条件的Stock模型对象?

解决Stock模型根据ticker包含特定字符串查询的问题

嘿,我懂你碰到的问题了——你把Ruby的include?方法直接写到SQL查询语句里啦,数据库可看不懂这种Ruby语法哦😉

为什么你之前的写法没用?

Stock.where("ticker.include?(?)", 'at') 这个写法的问题在于:where方法的第一个参数是SQL片段,不是Ruby代码。数据库无法识别Ruby的include?方法,所以这个查询会被判定为无效SQL,自然查不到结果。

正确的查询方式

下面几种方法都是直接在数据库层面执行匹配,不会把所有Stock对象加载到内存遍历,完全符合你的需求:

  • 基础SQL LIKE查询(兼容绝大多数数据库):

    Stock.where("ticker LIKE ?", "%at%")
    

    这里的%是SQL的通配符,%at%表示匹配任意包含at的字符串(前后可以有任意字符)。

  • Rails Arel写法(更优雅,自动适配数据库):
    如果你用的是Rails 5及以上版本,推荐用Arel来构建查询,不用写原始SQL,还能自动处理不同数据库的语法差异:

    Stock.where(Stock.arel_table[:ticker].matches("%at%"))
    
  • 不区分大小写的查询(针对PostgreSQL):
    如果你需要忽略大小写匹配(比如匹配AT、At、aT、at),PostgreSQL支持ILIKE:

    Stock.where("ticker ILIKE ?", "%at%")
    

这些方法都会直接让数据库执行筛选,效率比加载所有对象再用Ruby枚举器遍历高得多,而且完全符合你的要求~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:16:23