2011-03-16 6 views
6

Estoy usando Rails 3.0.5. Estoy usando MySQL como almacenamiento de base de datos. Tengo un modelo en el que una de las columnas debe ser BIGINT. Estoy utilizando el siguiente en mi archivo de migración crear:¿Cómo hacer que Rails genere 'schema.rb' con soporte bigint para MySQL?

t.column :my_column_name,  :bigint 

que funciona muy bien.

Sin embargo, cuando corro

rake db: migrate

el archivo generado 'schema.rb' crea la siguiente línea de la columna en particular:

t.integer "my_column_name",  :limit => 8 

cuales no es correcto.

Mi pregunta es dónde me equivoco con eso? ¿Hay algo que deba hacer para obtener el archivo correcto 'schema.rb'? ¿Puedo cambiar la forma en que se genera el archivo 'schema.rb'?

Tenga en cuenta que el hecho de que el archivo 'schema.rb' sea incorrecto causa problemas a mi servidor de integración continua, que ejecuta pruebas y crea el archivo desde cero (antes de ejecutar pruebas) utilizando el archivo 'schema.rb' .

Respuesta

9

ahora se dan cuenta de que

t.integer "my_column_name", :limit => 8 

con conductor my_sql es correcto en el archivo schema.rb.

La base de datos que se genera mediante el archivo 'schema.rb' crea un

bigint(20) 

aunque esto puede parecer extraño.

He encontrado esta investigando el código de adaptador de my_sql, el fragmento de la cual cito aquí:

def type_to_sql(type, limit = nil, precision = nil, scale = nil) 
     return super unless type.to_s == 'integer' 
     case limit 
     when 1; 'tinyint' 
     when 2; 'smallint' 
     when 3; 'mediumint' 
     when nil, 4, 11; 'int(11)' # compatibility with MySQL default 
     when 5..8; 'bigint' 
     else raise(ActiveRecordError, "No integer type has byte size #{limit}") 
     end 
     end 

Está claro, hay que: Límite => 8 acabará creando un bigint en MySQL db.

+1

De todos modos, esto no funciona para mí. Descubrí que al establecer un valor predeterminado de mi columna bigint en 18446744073709551615 (20 dígitos), db: test: prepare se queja sobre el valor predeterminado Inválido, imprimiendo la instrucción CREATE TABLE. Aquí veo que solo se usa 'bigint' sin (20). Configuración config.active_record.schema_format =: sql en application.rb crea la estructura correcta de la base de datos. –

Cuestiones relacionadas