sql - rails SQL : Creating a query dynamically

标签 sql ruby-on-rails arrays ruby

我正在尝试根据用户输入创建动态查询

if a
  conditions << ["fname like (?)"]
  sql_params <<  "abc"
end
if b
  conditions << ["lname like (?)"]  
  sql_params <<  "def"  
end
if c
  cconditions << ["middle like (?)"]  
  sql_params <<  "xyz"   
end

results = Model.where(conditions.join(' AND '), sql_params)

虽然条件语法正确,但 sql_params 被列为数组。这形成了下面的查询

Model.where("fname like (?) AND lname like (?) AND middle like (?)", ["abc","def","xyz"])

我需要的是

Model.where("fname like (?) AND lname like (?) AND middle like (?)", "abc","def","xyz")

我在 sql_params 数组上尝试了几个 map/join 等选项,但没有任何效果。

最佳答案

您确定要生产这个吗?

Model.where("fname like (?) AND lname like (?) AND middle like (?)", "abc","def","xyz")

形式的东西:

Model.where('expr1 AND expr2 AND expr3')

相当于:

Model.where('expr1').where('expr2').where('expr3')

那么为什么不逐个构建查询而不是乱用字符串呢?像这样:

query = Model.all
query = query.where('fname  like ?', 'abc') if a
query = query.where('lname  like ?', 'def') if b
query = query.where('middle like ?', 'xyz') if c

会给你同样的结果。

关于sql - rails SQL : Creating a query dynamically,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47930941/

相关文章:

mysql - 从文本中删除\n\r 的 sql 查询是什么?

javascript - 遍历数组中的项目以分配数据 ID,但仅获取数组中的最后一项

c# - 在NET核心中以有效的方式将一种数据类型的数组转换为另一种数据类型的数组?

sql - 在 Sybase IQ 中使用 LIST 和排序 - 多个 LIST 选择会引发 "ORDER BY"?

sql - 主键和外键约束混淆

mysql - 如何对sql语句的结果求和

ruby-on-rails - 通过 Ruby 中的获取链接检查远程文件大小

ruby-on-rails - 我可以从同一个 Apache 实例运行 LAMP 和 Rails 吗?

ruby-on-rails - 事件记录/rails : most efficient way to count results of multiple queries

C: 数组没有正确分配更多内存