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

标签 ruby-on-rails ruby ruby-on-rails-3 postgresql ruby-on-rails-4

在 Rails 3 中,我可以使用 sanitize_sql_array 为那些偶尔需要原始 SQL 查询的时刻清理原始 SQL。但这似乎已在 Rails 4 中删除,或者没有删除太多,而是移至 ActiveRecord::Sanitization。但是,我现在不知道如何调用 sanitize_sql_array,那么在 Rails 4 中清理原始 SQL 的最佳方法是什么?

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

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

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对其进行 sanitizer :

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)

关于ruby-on-rails - 如何清理 Rails 4 中的原始 SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34402835/

相关文章:

ruby-on-rails-3 - 继续获取发送消息所需的发件人(返回路径、发件人或发件人)

ruby - Rails 通过用户表单添加 rolify 角色

ruby-on-rails - 无法修复 Heroku H10 错误

ruby-on-rails - byebug 和网络控制台在 View 中不起作用

ruby-on-rails - Rails Active Admin 多对多关系

.net - 如何输出 rake 任务的性能时间

ruby - 线程死锁

ruby-on-rails - 请求 URI 过大错误 - 摆脱 GET?

ruby-on-rails - Rails CSRF 保护是如何工作的?

ruby-on-rails - 列出Rails应用程序中的可用发电机