ruby-on-rails – 如何在Rails 4中清理原始SQL

在Rails 3中,我可以使用sanitize_sql_array来清理那些需要原始SQL查询的偶然时刻的原始SQL.但是这似乎已经在Rails 4中删除了,或者没有那么多删除,而是转移到ActiveRecord :: Sanitization.但是,我现在无法弄清楚如何调用sanitize_sql_array,那么在Rails 4中清理原始SQL的最佳方法是什么?

我想澄清一下,我在这里讨论完整的原始SQL查询,而不是使用Rail的模型.我知道这不是最佳实践,这正是我必须为这个特定查询做的事情,因为它不能用Rails的好的ActiveRecord接口来表示(相信我,我已经尝试过了).

这是一个示例调用,它明显比我的查询实际上看起来更简单:

query = "SELECT * FROM users 
LEFT OUTER JOIN posts ON users.id=posts.user_id
AND posts.topic_id = '#{topic.id}'" 
# ^- Obviously bad and very vulnerable,this is what we're trying to fix
ActiveRecord::Base.connection.select_all(query)

解决方法

如果您真的需要编写原始SQL,可以使用 quote来清理它:
conn = ActiveRecord::Base.connection
name = conn.quote("John O'Neil")
title = conn.quote(nil)
query = "INSERT INTO users (name,title) VALUES (#{name},#{title})"
conn.execute(query)

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...