it-swarm.com.de

Schienen 4: Mehrere Spalten zur vorhandenen Tabelle hinzufügen

Ich kann einer vorhandenen Tabelle eine Spalte hinzufügen. Jetzt muss ich einer vorhandenen Tabelle viele Spalten hinzufügen. Gibt es einen kürzeren Weg für:

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

Muss ich das ALLE für ALLE zusätzlichen Spalten tun, die ich hinzufügen muss?

19
Sylar

Nicht notwendig Du kannst tun

Angenommen, TableName ist Benutzer

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

Hier finden Sie eine gute Ressource zu ActiveRecord: Migrations , in der alle Befehle aufgeführt sind, die Sie zur Bearbeitung Ihrer Datenbanken verwenden können. Sie können die Aufgabe auch so ausführen:

Rails g migration AddMoreColumnsToModel

Dann öffnen Sie die Migrationsdatei und setzen Folgendes:

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

Wenn Sie das tun möchten, was Maxd vorschlägt, da 100 Spalten desselben Typs automatisch erstellt werden, ist sein Code eine gute Idee.

14
Proto

Erstellen Sie einfach eine Migration und generieren Sie diese Spalten.

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

Diese Migrationsdatei kann in einer Schleife erstellt werden Möchten Sie das wirklich tun? Es sieht nicht richtig aus, ein so schweres Modell für alles zu erstellen.

2
IcyBright

Ähnlich den obigen Antworten, aber zum besseren Verständnis ist die Hoffnung unterhalb der Namenskonvention gut.

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

befehl zum Erstellen von new model und table mit columns:

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

befehl, um weitere columns unter der vorhandenen Tabelle hinzuzufügen:

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

Zum Schluss führen Sie migration mit dem Befehl aus:

rake db:migrate
0
puneet18