【问题标题】:Get SQL array from ActiveRecord::Relation从 ActiveRecord::Relation 获取 SQL 数组
【发布时间】:2015-05-13 19:13:48
【问题描述】:

我正在构建这样的查询:

scope = User.select(:name).where("name = ?", 'test')

在我的代码的另一部分,我正在尝试将 scope(它是一个 ActiveRecord::Relation 对象)转换为像 ["SELECT name FROM users WHERE name = ?", 'test'] 这样的 SQL 数组。有没有办法做到这一点?提前致谢。

【问题讨论】:

  • User.select(:name).where("name = ?", 'test').to_sql 应该将 SQL 查询作为字符串返回
  • 对,但是有没有办法将它作为 SQL 数组而不是 SQL 字符串取回?

标签: mysql sql ruby-on-rails activerecord


【解决方案1】:

似乎无法从ActiveRecord::Relation 对象中获取您想要的数组。

假设我们只是使用where。当我们调用User.where("name = ?", "test") 时,我们在ActiveRecord::QueryMethods 中输入where 方法。这调用where! 调用build_where。由于我们将查询作为字符串传递,因此我们最终到达这里:

# ActiveRecord::QueryMethods#build_where
when String, Array
  [@klass.send(:sanitize_sql, other.empty? ? opts : ([opts] + other))]

sanitize_sql将SQL查询与值结合起来,结果存储在where_values中:

> User.where("name = ?", "test").where_values
=> ["name = 'test'"]

ActiveRecord::Relation 只保留这个组合版本,而不是单独的查询和值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-14
    • 1970-01-01
    • 2013-06-24
    相关资源
    最近更新 更多