update_all
генерирует один SQL-запрос для запуска - он не может делать такие умные вещи, как преобразование произвольных битов ruby в эквивалентный SQL.
Вам нужно либо загрузить все свои экземпляры (например, через find_each
) и исправить их один за другим (т.е. не использовать update_all), например,
Foo.find_each do |foo|
# update foo here
foo.save!
end
Или найтиспособ выразить эту операцию очистки в SQL.Например, Postgres имеет функцию regexp_replace
Foo.update_all("some_column = regexp_replace(some_column, 'your_regexp_here', '','g')")
, которая удаляет все, что заменяет это регулярное выражение.Очевидно, вам нужно проверить документацию для вашей базы данных, чтобы увидеть, поддерживает ли она такую функцию.