Есть ли способ дезинформировать sql в методе rails find_by_sql
?
Я пробовал это решение: Ruby on Rails: как очистить строку для SQL, если вы не используете 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
Edit:
Хорошо, мой клиент попросил сделать эту функцию (выберите по sql) в панели администратора, чтобы сделать сложный запрос (объединения, особые условия и т.д.). Поэтому я действительно хочу find_by_sql, что.
Второе редактирование:
Я хочу достичь этого "злого" кода SQL, который не будет выполнен.
В панели администратора вы можете ввести запрос → Update users set admin = true where id = 232
, и я хочу заблокировать любую команду UPDATE/DROP/ALTER SQL.
Просто хочу знать, что здесь вы можете ТОЛЬКО выполнять SELECT.
После некоторых попыток я заключаю sanitize_sql_array
, к сожалению, этого не делают.
Есть ли способ сделать это в Rails?
Извините за путаницу..