2016-03-14 2 views
8
require 'lhm' 

class RenameField1ToField2ForTable < ActiveRecord::Migration 
    def up 
    Lhm.change_table :table do |m| 
     m.ddl("ALTER TABLE %s CHANGE COLUMN field1 field2 FLOAT DEFAULT NULL AFTER field3" m.name) 
    end 
    end 

    def down 
    Lhm.change_table :table do |m| 
     m.ddl("ALTER TABLE %s CHANGE COLUMN field2 field1 FLOAT DEFAULT NULL AFTER field3" m.name) 
    end 
    end 
end 

Was passiert:ALTER TABLE lhm Migration löscht vorhandene Werte

  1. Rails-4.0: rake db: migrate
  2. Feld erfolgreich umbenannt wurde.
  3. Alle vorhandenen Feldwerte werden gelöscht, warum? Irgendwelche Ideen?

Edit:

  • alten Datentyp war float(11)
  • MYSQL 5,6
+2

Was war der vorherige Datentyp? – Matt

+0

Alter Datentyp war Float (11) –

+0

MySQL-Version? –

Antwort

0

Können Sie eine gerade Schienen Migration wie folgt:

def change 
    rename_column :table_name, :old_column, :new_column 
end 

habe ich noch nie benutzt lhm damit das vielleicht nicht möglich ist?

Auch brauchen Sie möglicherweise nicht die "FLOAT DEFAULT NULL" in Ihrer aktuellen SQL-Anweisung, wenn es bereits in der DB angegeben ist.

Hoffe, dass hilft.

+0

Mit der lhm-Migration kann ich leider nicht den normalen Rails-Weg gehen. Und da die Migration bereits durchlaufen ist, möchte ich nur den Grund finden, warum die Werte gelöscht wurden –

0

Umbenennungs 1st_name temporary_name und 2nd_name dann 1st_name umbenennen und dann von temporary_name umbenennen 2nd_name

3

würde ich sehr empfehlen Sie die Methoden, um Sie von LHM zur Verfügung gestellt verwenden, die die, die von Rails (wenn Sie imitieren planen LHM verwenden):

Lhm.change_table(:users) do |m| 
    m.change_column(:old_column, :float) 
    m.rename_column(:old_column, :new_column) 
end 

Wenn man sich die Methodendefinitionen betrachten, sehen Sie LHM macht einen MODIFY, wo Sie eine CHANGE für change_column tun, und ein CHANGE für rename_column.

Offizielle Dokumente:

change_column: https://docs.omniref.com/ruby/gems/lhm/2.2.0/symbols/Lhm::Migrator/change_column?d=415590290&n=0#

rename_column: https://docs.omniref.com/github/soundcloud/lhm/2.2.0/symbols/Lhm::Migrator/rename_column?d=409846811&n=4#