我有一个表格,用户可以使用许多不同类型的组合以多种方式进行过滤。对于我从用户那里获得的所有输入数据,从 SQL 中转义用户数据对我来说很重要,这会导致我现在遇到的问题。我有两个数组,它们是根据发送给动作的参数动态构建的,一个数组包含 SQL 子句,另一个包含要与其各自的原因配对的值……例如……
def results
sql_clauses = Array.new
sql_args = Array.new
unless params[:elapsed_time].nil?
sql_clauses << "elapsed_time = ?"
sql_args << params[:elaped_time]
end
unless params[:age_greater_than].nil?
sql_clauses << "age > ?"
sql_args << params[:age_greater_than]
end
.....
@results = Model.where(sql_clauses.join(" and "), sql_args.join(", "))
end
现在这将 sql_clauses 数组发送到 where 方法没有问题。但是它在第二个参数上爆炸了,因为它返回一个字符串,并且它期望单个变量与每个“?”相对应。出现在 sql_clauses 数组中的字段。我已经尝试了 KandadaBoggu 在Comine arrays of conditions in rails上提供的解决方案。虽然这些选项都不适合我,但这可能是因为我使用的是 2 个数组而不是 1 个。
有人知道我的问题的解决方案吗?