ruby-on-rails – 如何在Rails 4中清理原始SQL
发布时间:2020-12-16 20:52:38 所属栏目:百科 来源:网络整理
导读:在Rails 3中,我可以使用sanitize_sql_array来清理那些需要原始SQL查询的偶然时刻的原始SQL.但是这似乎已经在Rails 4中删除了,或者没有那么多删除,而是转移到ActiveRecord :: Sanitization.但是,我现在无法弄清楚如何调用sanitize_sql_array,那么在Rails 4中
在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) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |