Código primera:Rieles de base de datos valores booleanos
create_table :users do |t|
...
t.boolean :is_active, :default => true
...
end
Ahora, aquí es mi problema - Estoy creando una tarea rastrillo para importar un número grande de registros (10.000). Hice pruebas exhaustivas y evaluaciones comparativas, y determiné que la manera más rápida y eficiente de realizar esta tarea es crear una declaración SQL en bruto gigante. (Estoy leyendo datos de CSV). Como ejemplo:
inserts = Array.new
FasterCSV.foreach(...) do |row|
inserts.push "(row[0], row[1]...)"
end
User.connection.execute "INSERT INTO users (...) VALUES #{inserts.join(", ")}"
Todo funciona genial. Todo el proceso se completa en (literalmente) segundos en lugar de las 1.5 horas que usan ActiveRecord. Sin embargo, mi problema radica en el campo booleano. Desarrollo localmente en SQLite, pero MySQL en producción. Al usar ActiveRecord, Rails determina qué poner en el campo "booleano" (ya que casi todas las bases de datos son diferentes). Estoy escribiendo SQL personalizado y quiero saber si hay alguna manera de hacer algo así ...
INSERT INTO users(..., is_active, ...) VALUES (..., ActiveRecord::Base.connection.boolean.true, ...)
... que devuelve correctamente el valor booleano-base de datos específica.
Cualquiera que responda "solo usando ActiveRecord" será votado negativamente. Simplemente NO es posible en esta situación. Tampoco estoy dispuesto a usar un campo tinyint (1) y uso 1 o 0.
En resumen, el valor de is_active
tiene que cambiar en base a la conexión de base de datos actual ...
Es esto posible?
¿Por qué no desarrolla localmente con MySQL? Eso resolvería este problema, junto con otras incompatibilidades. La forma en que generalmente trato con booleanos es usar una declaración preparada, pero no funcionará para ti. –
Eso no responde mi pregunta sin embargo. ¿Qué pasa si quiero usar POSTgres o MSSQL en algún momento? – sethvargo