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

前端之家收集整理的这篇文章主要介绍了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)
原文链接:https://www.f2er.com/ruby/274246.html

猜你在找的Ruby相关文章