有没有办法在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中做到这一点?
对困惑感到抱歉..
最佳答案
试试这个:
connect = ActiveRecord::Base.connection();
connect.execute(ActiveRecord::Base.send(:sanitize_sql_array, "your string"))
您可以将其保存在变量中并用于您的目的。
关于ruby-on-rails - Rails,如何在find_by_sql中清理SQL,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7145645/