2016-03-14 19 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 

Cos'è successo:ALTER TABLE migrazione LHM cancella valori esistenti

  1. Rails-4.0: rake db: migrate
  2. Il campo è stato rinominato con successo.
  3. Tutti i valori di campo esistenti vengono cancellati, perché? Qualche idea?

Edit:

  • vecchio tipo di dati era float(11)
  • MYSQL 5,6
+2

Qual è stato il tipo di dati precedente? – Matt

+0

Old Datatype era float (11) –

+0

versione MySQL? –

risposta

0

Si può fare un rotaie migrazione dritto in questo modo:

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

non ho mai usato lhm quindi questo potrebbe non essere possibile?

Inoltre, potrebbe non essere necessario "FLOAT DEFAULT NULL" nell'istruzione SQL corrente se è già specificato nel DB.

Spero che questo aiuti.

+0

Con la migrazione di lhm non posso andare nel modo normale delle rotaie, purtroppo. E poiché la migrazione è già in esecuzione, voglio solo ottenere il motivo per cui i valori sono stati cancellati –

0

rinomina 1st_name a temporary_name, e quindi rinominare 2nd_name a 1st_name, e quindi rinominare dal temporary_name a 2nd_name

3

altamente li suggerirei si utilizzano i metodi messi a voi da LHM che imitano quelli di Rails (se si prevede di utilizzare LHM):

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

Se si guardano le definizioni di metodo, si vedrà LHM sta facendo un MODIFY in cui si sta facendo un CHANGE per change_column, e un CHANGE per rename_column.

Documenti Ufficiali:

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#

Problemi correlati