Si bien la respuesta aceptada es excelente, quería agregar una respuesta aquí que espero que trate mejor la pregunta original de la parte 2 de los carteles, para los no expertos como yo.
- How do I create a migration to replace the type of that column
generar la migración andamio
Puede generar una migración de mantener su cambio tecleando en la consola (basta con sustituir el table
para su nombre de tablas, y column
para usted nombre de la columna)
rails generate migrate change_table_column
Esto generará la migración del esqueleto dentro de la aplicación Rails/db/migrate/folder. Esta migración es un marcador de posición para su código de migración.
Por ejemplo, yo quiero crear una migración de cambiar el tipo de una columna desde 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
El funcionamiento de su migración
Una vez que haya ingresó el código para cambiar la columna que acaba de ejecutar:
rake db:migrate
Para aplicar su migrati en. Si comete un error siempre se puede revertir el cambio con:
rake db:rollack
Arriba y Abajo métodos
las referencias respuesta aceptada Up
Down
y métodos, en lugar de la más reciente Change
método. Desde los raíles 3.2antiguo estilo Los métodos Arriba y Abajo presentan algunas ventajas sobre el nuevo método de Cambio. 'Arriba y Abajo' evite ActiveRecord::IrreversibleMigration exception
. Desde el lanzamiento de Rails 4 puede utilizar reversible
para evitar este error:
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
Disfrute de rieles :)
Gran respuesta. Una nota: Rails actualmente no admite change_column con el método change (http://guides.rubyonrails.org/migrations.html#using-the-change-method); si la memoria sirve, crearás una migración irreversible si lo haces. Mejor hacerlo a la vieja usanza con métodos up/down. – poetmountain
@BourbonJockey: tiene sentido que 'change' no pueda revertir automáticamente un cambio de tipo y la [Migrations Guide] (http://guides.rubyonrails.org/migrations.html#anatomy-of-a- migración) dice que "[el método de cambio] Este método es preferido para escribir migraciones constructivas (agregando columnas o tablas)" y 'change_column' no está en la lista a la que apunta, así que creo que tiene razón. Lo arreglé para usar 'arriba'/'abajo' (con una advertencia en 'abajo'), gracias por el aviso. –
Para referencias futuras de otros lectores, la conversión de cadena a texto en Postgres en Heroku de esta manera NO perderá datos. –