web-dev-qa-db-fra.com

Rails 4: Ajouter plusieurs colonnes à la table existante

Je sais comment ajouter une colonne à une table existante. Maintenant, je dois ajouter plusieurs colonnes à une table existante. Y a-t-il un moyen plus court pour:

add_col1_col2_col3_col4_.._coln_to_tables col1:integer col2:integer etc...

Dois-je faire ce qui précède pour TOUTES les colonnes supplémentaires que je dois ajouter?

19
Sylar

Non pas nécessaire. Tu peux faire

En supposant que TableName est utilisateur

Rails g migration AddColumnsToUser col1:integer col2:integer .. etc.
37
Shweta

Voici une bonne ressource sur ActiveRecord: Migrations qui répertorie toutes les commandes que vous pouvez utiliser pour manipuler vos bases de données. Vous pouvez aussi faire la tâche de cette façon:

Rails g migration AddMoreColumnsToModel

Puis ouvrez le fichier de migration et mettez:

def change
  add_column :table, :new_column, :type
  # add as many columns as you need 
end

Si vous voulez faire ce que Maxd suggère, ayant littéralement 100 colonnes du même type à créer automatiquement, son code est une bonne idée.

14
Proto

Il suffit de créer une migration et de générer ces colonnes, à savoir:

class ChangeTables < ActiveRecord::Migration
  def change
    change_table :tables do |t|
      100.times do |i|
        t.integer :"column_#{i}"
      end
    end
  end
end
5
Maxim Dobryakov

Ce fichier de migration peut être réalisé en boucle . Mais voulez-vous vraiment le faire? Il ne semble pas correct de créer un modèle aussi lourd pour tout contenir.

2
IcyBright

Semblable aux réponses ci-dessus mais pour la compréhension du but, l’espoir ci-dessous est correct.

Rails g migration add_first_column_and_second_column_to_model first_column:string second_column:string
1
Dinesh Pallapa

commande pour créer new model et table avec columns:

Rails g model ModelName col_name1:string col_name2:integer col_name3:text ...

commande pour ajouter plus columns sous la table existante:

Rails g migration AddColumnToModelName col_name4:string col_name5:integer ...

Enfin, lancez migration avec la commande:

rake db:migrate
0
puneet18