Si bien la respuesta aceptada es excelente, quería agregar una respuesta aquí que, con suerte, se ocupa mejor de la parte 2 de la pregunta sobre los carteles originales, para los no expertos como yo.
- ¿Cómo creo una migración para reemplazar el tipo de esa columna?
generando migración de andamios
Puede generar una migración para mantener su cambio escribiendo en su consola (solo reemplace el table
por el nombre de su tabla y column
por el nombre de su columna)
rails generate migration change_table_column
Esto generará una migración de esqueleto dentro de su aplicación Rails / db / migrate / carpeta. Esta migración es un marcador de posición para su código de migración.
Por ejemplo, quiero crear una migración para cambiar el tipo de columna de string
a text
, en una tabla llamada TodoItems:
class ChangeTodoItemsDescription < ActiveRecord::Migration
def change
# enter code here
change_column :todo_items, :description, :text
end
end
Ejecutando su migración
Una vez que haya ingresado el código para cambiar la columna, simplemente ejecute:
rake db:migrate
Para aplicar su migración. Si comete un error, siempre puede revertir el cambio con:
rake db:rollack
Métodos arriba y abajo
Las referencias Up
y Down
métodos de respuesta aceptados , en lugar del Change
método más nuevo . Dado que los métodos de subida y bajada de estilo antiguo de rieles 3.2 presentaban algunas ventajas sobre el método de cambio más nuevo. Evitar 'Arriba y Abajo' . Desde el lanzamiento de Rails 4 , puede utilizar para evitar este error:ActiveRecord::IrreversibleMigration exception
reversible
class ChangeProductsPrice < ActiveRecord::Migration
def change
reversible do |dir|
change_table :products do |t|
dir.up { t.change :price, :string }
dir.down { t.change :price, :integer }
end
end
end
end
Disfruta de Rails :)
change
no pueda revertir automáticamente un cambio de tipo y la Guía de migraciones dice que "[el método de cambio] Este método es el preferido para escribir migraciones constructivas (agregar columnas o tablas)" ychange_column
no t en la lista que señala, así que creo que tiene razón. Lo arreglé para usarup
/down
(con una advertencia en eldown
), gracias por el aviso.text
solo para obtener una longitud ilimitada; puede usar sin restriccionesvarchar
. Rails está imponiendo este extraño límite, no PostgreSQL.