问题描述
主要参考本文档中的方法 https://api.rubyonrails.org/classes/ActiveRecord/Sanitization/ClassMethods.html
我有一个SQL,id = :id
,以及需要清理的即将出现的绑定变量的用户输入。 sanitize_sql_for_conditions
非常适合我的情况。但是,似乎只能通过方法或活动的数据库连接来调用它。没有模型或数据库连接,是否可以使用sanitize_sql_*
方法?我知道ActiveRecord::Base::sanitize_sql
可以工作,但是我不希望使用不推荐使用的方法。
当前在5.2导轨上
解决方法
tl; dr如果没有连接到数据库,就无法做到这一点。
由于我研究了sanitize_sql_for_conditions
的工作原理,因此将在这里回答我自己的问题。将sanitize_sql_for_conditions
与包含sql和哈希的数组输入一起使用时,它最终指向replace_bind_variable(value,c = connection)
,这需要连接到db才能确定要使用的quote
方法。所以这里没有运气。