有沒有辦法在rails方法find_by_sql
中清理sql?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 SELECT)的管理面板,使一些複雜的查詢客戶端(連接,特殊條件等)。所以我真的想find_by_sql那個。
第二個編輯:
我想實現這個「邪惡」的SQL代碼不會被執行。
在管理面板中,您可以鍵入查詢 - >Update users set admin = true where id = 232
,我想阻止任何UPDATE/DROP/ALTER SQL命令。 只是想知道,在這裏你只能執行SELECT。
經過一番嘗試,我得出結論sanitize_sql_array
不幸的是不這樣做。
有沒有辦法在Rails中做到這一點?
很抱歉的混亂..
結果:'保護方法 'sanitize_sql_array' 稱爲ActiveRecord的::基地:Class' –
我已更新我的帖子。我希望它會幫助你 – bor1s
..或者你可以使用這個:'ActiveRecord :: Base.send(:sanitize_sql_array,「你的字符串」)' – bor1s