Базовые значения базы данных Rails

Сначала код:

create_table :users do |t|
  ...
  t.boolean :is_active, :default => true
  ...
end

Теперь, вот моя проблема. Я создаю задачу rake для импорта БОЛЬШОГО количества записей (10 000+). Я провел обширное тестирование и сравнительный анализ и решил, что самый быстрый и эффективный способ выполнения этой задачи - создать один гигантский SQL-запрос. (Я читаю данные из CSV). В качестве примера:

inserts = Array.new
FasterCSV.foreach(...) do |row|
  inserts.push "(row[0], row[1]...)"
end
User.connection.execute "INSERT INTO users (...) VALUES #{inserts.join(", ")}"

Все отлично работает. Весь процесс завершается в (буквально) секундах вместо 1,5 часов с использованием ActiveRecord. Однако моя проблема связана с булевым полем. Я разрабатываю локально на SQLite, но MySQL на производстве. При использовании ActiveRecord Rails определяет, что вводить в поле "boolean" (поскольку почти все базы данных разные). Я пишу пользовательский SQL, и я хочу знать, есть ли способ сделать что-то вроде...

INSERT INTO users(..., is_active, ...) VALUES (..., ActiveRecord::Base.connection.boolean.true, ...)

..., который корректно возвращает логическое значение, специфичное для базы данных.

Любой, кто отвечает "просто используя ActiveRecord", будет проголосован. В этой ситуации это просто невозможно. Я также не хочу использовать поле tinyint (1) и использовать 1 или 0.

Таким образом, значение для is_active необходимо изменить на основе текущего соединения с базой данных...

Возможно ли это?

Ответы

Ответ 1

Я считаю, что вы можете искать ActiveRecord::Base.connection.quoted_true

Это возвращает исходные булевские значения в кавычках, например. '1' для SQL Server или MySQL и 't' для PostgreSQL или SQLite