我正在建立这样的查询:
scope = User.select(:name).where("name = ?", 'test')
在我的代码的另一部分中,我尝试将scope
(ActiveRecord::Relation
对象转换为["SELECT name FROM users WHERE name = ?", 'test']
之类的SQL数组。有没有办法实现这个目标?提前谢谢。
答案 0 :(得分:0)
似乎无法从ActiveRecord::Relation
对象获取您想要的数组。
说我们只是使用where
。当我们致电User.where("name = ?", "test")
时,我们会在ActiveRecord::QueryMethods中输入where
方法。这会调用调用where!
的{{1}}。因为我们将查询作为字符串传递,所以我们最终在这里:
build_where
# ActiveRecord::QueryMethods#build_where
when String, Array
[@klass.send(:sanitize_sql, other.empty? ? opts : ([opts] + other))]
将SQL查询与值组合在一起,结果存储在sanitize_sql
中:
where_values
> User.where("name = ?", "test").where_values
=> ["name = 'test'"]
仅保留此合并版本,而不是单独的查询和值。