有没有办法在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/

10-12 12:55
查看更多