Es sieht so aus, als ob die neue Rails-Version die Methoden "change" gegenüber self.up und self.down hat.
Was passiert also, wenn eine Migration zurückgesetzt werden muss? Woher weiß es, welche Aktionen auszuführen sind? Ich habe die folgende Methode, die ich basierend auf einem Online-Tutorial implementieren muss:
class AddImageToUsers < ActiveRecord::Migration
def self.up
add_column :users, :image_file_name, :string
add_column :users, :image_content_type, :string
add_column :users, :image_file_size, :integer
add_column :users, :image_updated_at, :datetime
end
def self.down
remove_column :users, :image_file_name, :string
remove_column :users, :image_content_type, :string
remove_column :users, :image_file_size, :integer
remove_column :users, :image_updated_at, :datetime
end
end
Wie kann ich dasselbe mit der neuen Änderungsmethode tun?
ruby-on-rails
migration
BanditKing
quelle
quelle
Antworten:
Für viele Operationen können Schienen erraten, was die umgekehrte Operation ist (ohne Probleme). Was ist in Ihrem Fall beispielsweise die umgekehrte Operation
add_column
, die beim Rollback aufgerufen wird? Natürlich ist es dasremove_column
. Was ist das Gegenteil voncreate_table
? Es istdrop_table
. In diesen Fällendown
ist es überflüssig, dass Rails wissen, wie eine Methode zurückgesetzt und definiert wird (Sie können in der Dokumentation die Methoden sehen, die derzeit von der Änderungsmethode unterstützt werden ).Beachten Sie jedoch, dass Sie für eine Operation die
down
Methode noch definieren müssen. Wenn Sie beispielsweise die Genauigkeit einer Dezimalspalte ändern, wie können Sie die ursprüngliche Genauigkeit beim Rollback erraten? Es ist nicht möglich, daher müssen Sie diedown
Methode definieren .Wie gesagt, ich empfehle Ihnen, den Rails Migrations Guide zu lesen .
quelle
Besser Up, Down, Change verwenden:
Auf Schienen 3 (umkehrbar): Hiermit sollte eine neue Spalte nach oben hinzugefügt und alle Datensätze in der Tabelle nur nach oben gefüllt und diese Spalte nur nach unten gelöscht werden
Aber:
Sie mussten die Änderungsmethode vermeiden, um Zeit zu sparen. Wenn Sie beispielsweise den Spaltenwert nicht sofort nach dem Hinzufügen aktualisieren müssen, können Sie diesen Code folgendermaßen reduzieren:
Nach oben wird der Tabelle eine Spalte hinzugefügt und nach unten entfernt. Viel weniger Code und es ist ein Gewinn.
On Rails 4: Ein weiterer nützlicher Weg, um das, was wir brauchen, an einem Ort zu schreiben:
quelle
ActiveRecord::IrreversibleMigration
.quelle