У меня есть куча операторов SQL для выполнения в базе данных. (Насколько я знаю, я делаю вещи, для которых Rails не предоставляет методы: создание представлений, добавление внешних ключей и т. Д. В основном это не для взаимодействия с Rails с данными.) следующее:
sql = "statement_1; statement_2; statement_3; etc;"
ActiveRecord::Base.connection.execute(sql)
Или с символами новой строки, например:
sql = <<EOF
statement_1;
statement_2;
statement_3;
etc;
EOF
ActiveRecord::Base.connection.execute(sql)
(Очевидно, что эти заявления просто заполнители, но я не думаю, что их содержание имеет значение, согласно моим тестам.)
В любом случае выполняется только первый оператор, а остальные, похоже, игнорируются. Это то, что происходит? Я вижу только эффекты первого утверждения, когда пытаюсь использовать более одного. Нужно ли выполнять каждый из них отдельно? Один набор операторов исходит из файла, поэтому было бы неплохо просто загрузить содержимое файла и выполнить. Если бы у меня были лучшие стратегии, я бы заинтересовался ими.
Я надеялся, что документация по execute
проливает некоторый свет, но, кроме использования единственного числа («оператор»), этого не происходит. Возможно это из-за движка базы данных, который я использую? (Для справки, я сейчас использую SQLite.)
ОБНОВЛЕНИЕ: Я закончил тем, что написал метод, который делает следующее:
def extract_sql_statements(sql)
statements = []
sql.split(';').each do |statement|
statement.strip!
unless statement.empty?
statement += ';'
statements << statement
end
end
return statements
end
... и затем цикл statements
. Проблема исправлена, но если есть более элегантные решения, мне было бы интересно узнать о них.