我正在尝试根据用户输入创建动态查询
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/