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

Rails 5 如何动态生成多条件WHERE查询?

动态生成多条件ActiveRecord查询方案

我来帮你搞定这个动态拼接WHERE条件的问题~你现在的需求是把手动写的多次where调用变成根据keywords数组动态生成,其实核心就是利用ActiveRelation的链式调用特性,一步步叠加查询条件就好。

实现代码

def generate_query(the_query)
  query_template, keywords = the_query
  # 初始化基础查询对象
  user_query = User.all
  # 遍历每个关键词组,逐个添加WHERE条件
  keywords.each do |keyword_pair|
    user_query = user_query.where(query_template, *keyword_pair)
  end
  # 返回最终构建好的查询对象(执行时才会触发SQL查询)
  user_query
end

原理说明

  • ActiveRecord的where方法不会直接执行SQL,而是返回一个新的ActiveRelation对象,所以我们可以通过链式调用不断叠加条件,就和你手动写User.where(...).where(...)的效果完全一致。
  • 当keywords = [['abc','abc'],['123','123']]时,最终生成的SQL会是:
    SELECT "users".* FROM "users" WHERE (name LIKE 'abc' OR desc LIKE 'abc') AND (name LIKE '123' OR desc LIKE '123')
    
    完美匹配你手动编写的查询逻辑。

小提示

这里用占位符?传参的方式是安全的,能有效避免SQL注入问题,继续保持这个写法就好~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:23:30