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