J'ai actuellement une migration appelée Produits, et je veux simplement ajouter quelques chaînes supplémentaires à cette migration, telles que la description et le type de produit. Quelle est la meilleure façon de procéder?
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
Juste courir
Rails g migration add_description_to_products description:string
Rails g migration add_product_type_to_products product_type:string
puis courir
rake db:migrate
Lors du développement de toute application pratique, vous effectuerez plusieurs migrations, qui sont essentiellement des instructions DDL (langage de définition de données). Dans la vraie vie, vous aurez plusieurs environnements (développement, test, production, etc.) et il est fort possible que vous changiez la base de données de développement pendant que vous avez une version en production. Pour cette raison, la méthode Rails consiste à générer une nouvelle migration pour toute modification apportée à la base de données au lieu d’apporter des modifications directes au fichier de migration existant.
Alors, familiarisez-vous avec les migrations.
Pour la question spécifique, vous pouvez faire:
Rails g migration add_attributes_to_products attr1 attr2 attr3
Cela générera un nouveau fichier de migration permettant d'ajouter 3 nouveaux attributs à la table products (dans le modèle Product). Le type par défaut pour les attributs est string
. Pour d'autres, vous devez le spécifier comme suit:
Rails g migration add_attributes_to_products attr1:integer attr2:text attr3:enum
En supposant que vous ayez créé la table avec la migration ci-dessus, ajoutez ensuite product_type (vous aviez déjà une description):
# 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
utilisez rollback
si votre dernière action est migration
rake db:rollback
Ajoutez ensuite des attributs dans le fichier de migration
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
Après cela migrer en utilisant
rake db:migrate
Si la migration n'est pas votre dernière action, générez un nouveau fichier de migration à partir de dans les réponses ci-dessus.
Rails g migration add_attributes_to_products product_type:string
Le code ci-dessus génère uniquement le fichier de migration, mais vous souhaitez utiliser rake db:migrate
pour migrer le fichier.
Si vous souhaitez apporter d'autres modifications à ce fichier de migration, telles que l'ajout d'attributs, faites-le avant de migrer, sinon vous devez utiliser la méthode que j'ai mentionnée au début si votre dernière action est la migration ou vous devez générer un autre fichier de migration cliquez sur ce lien pour en savoir plus sur la migration http://guides.rubyonrails.org/v3.2.8/migrations.html
Les Rails génèrent la 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
lancez rake db: migrate et votre schema.rb sera mis à jour automatiquement