Rails database boolean values

Код первый:

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. Однако моя проблема заключается в поле boolean. Я разрабатываю локально на SQLite, а на производстве использую MySQL. При использовании ActiveRecord Rails определяет, что нужно поместить в поле "boolean" (поскольку почти все базы данных разные). Я пишу пользовательский SQL и хочу знать, есть ли способ сделать что-то вроде...

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

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

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

В общем, значение для is_active должно меняться в зависимости от текущего подключения к базе данных...

Возможно ли это вообще?

15
задан sethvargo 27 December 2010 в 22:00
поделиться