ruby-on-rails-3.1

ruby on rails 3.1 - Los rieles generan migración



ruby-on-rails-3.1 (5)

Actualmente tengo una migración llamada Productos, y simplemente quiero agregar algunas cadenas más a esta migración, como la descripción y el tipo de producto. ¿Cuál es la mejor manera de hacer esto?

class CreateProducts < ActiveRecord::Migration def change create_table :products do |t| t.string :name t.decimal :price t.text :description t.timestamps end end end


En el desarrollo de cualquier aplicación práctica, realizará bastantes migraciones que son básicamente sentencias DDL (lenguaje de definición de datos). En la vida real, tendrá varios entornos (desarrollo, prueba, producción, etc.) y es muy posible que cambie la base de datos de desarrollo mientras tiene una versión en producción. Por esta razón, la forma de Rails es generar una nueva migración para cualquier cambio en la base de datos en lugar de realizar cambios directos al archivo de migración existente.

Por lo tanto, familiarícese con las migraciones.

Para la pregunta específica, puede hacer:

rails g migration add_attributes_to_products attr1 attr2 attr3

Esto generará un nuevo archivo de migración para agregar 3 nuevos atributos a la tabla de productos (al modelo Producto). El tipo predeterminado para los atributos es string . Para otros, lo has especificado así:

rails g migration add_attributes_to_products attr1:integer attr2:text attr3:enum


Solo corre

rails g migration add_description_to_products description:string rails g migration add_product_type_to_products product_type:string

y luego corre

rake db:migrate


Suponiendo que creó la tabla con la migración anterior, para agregar product_type (ya tenía una descripción) haría:

# db/migrate/20130201121110_add_product_type_to_product.rb class AddProductTypeToProduct < ActiveRecord::Migration def change add_column :products, :product_type, :string Product.all.each do |product| product.update_attributes!(:product_type => ''unknown'') end end end


rake generate migration add_description_to_products

AddDescriptionToProducts < ActiveRecords:: Migration[v] def change add_column :products :description :string add_column :name_of_table :name_of_column :data_type end

ejecutar rake db: migrate y su schema.rb debe actualizarse


use la rollback si su última acción es la migration

rake db:rollback

A continuación, agregue atributos en el archivo de migración

class CreateProducts < ActiveRecord::Migration def change create_table :products do |t| t.string :name t.decimal :price t.text :description t.string :product_type #adding product_type attribute to the products table t.timestamps end end end

Después de eso migrar usando

rake db:migrate

Si migrar no es su última acción, genere un nuevo archivo de migración a partir de las respuestas anteriores

rails g migration add_attributes_to_products product_type:string

El código anterior solo genera el archivo de migración, pero usted desea usar rake db:migrate para migrar el archivo.

Si desea realizar más cambios en ese archivo de migración, como agregar más atributos, hágalo antes de migrar; de lo contrario, debe usar el método que mencioné al principio si su última acción es migración o si no necesita generar otro archivo de migración. revise este enlace para saber más sobre la migración http://guides.rubyonrails.org/v3.2.8/migrations.html