【问题标题】:Rails: Use sanitize_sql_for_conditions without model or db connectionRails:在没有模型或数据库连接的情况下使用 sanitize_sql_for_conditions
【发布时间】:2020-09-12 03:04:09
【问题描述】:

主要参考本文档中的方法 https://api.rubyonrails.org/classes/ActiveRecord/Sanitization/ClassMethods.html

我有一个 sql,id = :id,以及我需要清理的绑定变量的用户输入。 sanitize_sql_for_conditions 非常适合我的情况。但是,它似乎只能通过方法或通过活动的 DB 连接来调用。有没有没有模型或数据库连接的sanitize_sql_* 方法?我知道ActiveRecord::Base::sanitize_sql 有效,但我不想使用已弃用的方法。

目前在 Rails 5.2 上

【问题讨论】:

    标签: ruby-on-rails ruby activerecord


    【解决方案1】:

    tl;dr 如果没有与数据库的连接,就无法做到这一点。

    我会在这里回答我自己的问题,因为我研究了sanitize_sql_for_conditions 的工作原理。当将sanitize_sql_for_conditions 与包含sql 和哈希的数组输入一起使用时,它最终指向replace_bind_variable(value, c = connection),这需要连接到数据库以确定要使用的quote 方法。所以这里没有运气。

    【讨论】:

    • 在某种程度上 - 有点道理。你为什么要在没有数据库连接的情况下清理 sql:D。很好的发现。
    • @mrrogers 长话短说,我在 Rails 应用程序之外有一个静态数据库客户端,我从 Rails 向它发送 SQL 语句,而不是使用 ActiveRecord。
    • 您能否使用有关如何连接到当前数据库的信息来更新您的答案?看来您是说应该可以使用sanitize_sql_for_conditions,但ActiveRecord::Base.connection.sanitize_sql_for_conditions 不起作用。
    猜你喜欢
    • 2017-12-10
    • 1970-01-01
    • 1970-01-01
    • 2014-10-24
    • 1970-01-01
    • 2012-07-11
    • 2012-03-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多