【发布时间】:2011-11-01 00:26:37
【问题描述】:
有没有办法在rails方法find_by_sql中清理sql?
我试过这个解决方案: Ruby on Rails: How to sanitize a string for SQL when not using find?
但它失败了
Model.execute_sql("Update users set active = 0 where id = 2")
它抛出一个错误,但是执行了 sql 代码并且 ID 为 2 的用户现在有一个禁用的帐户。
简单的find_by_sql也行不通:
Model.find_by_sql("UPDATE user set active = 0 where id = 1")
# => code executed, user with id 1 have now ban
编辑:
我的客户要求在管理面板中创建该功能(通过 sql 选择)以进行一些复杂的查询(连接、特殊条件等)。所以我真的很想find_by_sql那个。
第二次编辑:
我想实现“邪恶”的 SQL 代码不会被执行。
在管理面板中,您可以输入 query -> Update users set admin = true where id = 232 我想阻止任何 UPDATE / DROP / ALTER SQL 命令。
只想知道,这里只能执行SELECT。
经过一些尝试,我得出结论 sanitize_sql_array 很遗憾不要那样做。
有没有办法在 Rails 中做到这一点?
抱歉给您带来了困扰。
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-3 activerecord find-by-sql