Creé una tabla en mi aplicación de rieles con el comando rails generate migrations. Aquí es que el archivo de migración:Migraciones de rieles: intenté cambiar el tipo de columna de cadena a entero
class CreateListings < ActiveRecord::Migration
def change
create_table :listings do |t|
t.string :name
t.string :telephone
t.string :latitude
t.string :longitude
t.timestamps
end
end
end
luego quería para almacenar la latitud y longitud como enteros de modo Traté de correr:
rails generate migration changeColumnType
y el contenido de ese archivo son:
class ChangeColumnType < ActiveRecord::Migration
def up
#change latitude columntype from string to integertype
change_column :listings, :latitude, :integer
change_column :listings, :longitude, :integer
#change longitude columntype from string to integer type
end
def down
end
end
Esperaba que el tipo de columna cambiara, pero se canceló el rake y apareció el siguiente mensaje de error. Me preguntaba por qué esto no pasó? Estoy usando postgresql en mi aplicación.
rake db:migrate
== ChangeColumnType: migrating ===============================================
-- change_column(:listings, :latitude, :integer)
rake aborted!
An error has occurred, this and all later migrations canceled:
PG::Error: ERROR: column "latitude" cannot be cast to type integer
: ALTER TABLE "listings" ALTER COLUMN "latitude" TYPE integer
Tasks: TOP => db:migrate
(See full trace by running task with --trace)
NOTA: La tabla no tiene DATOS. Gracias
Asegúrese de que tiene datos sobre ella y usted podría intentar hacer un rollback –
Si no hay datos que puede simplemente eliminar las columnas y volver a añadirlos con el tipo correcto. Un grado completo de latitud y longitud es bastante grande, por lo que es posible que desee pensar en qué tipo realmente desea para esas columnas. –