Sto provando a convertire una colonna nella mia app Rails, per ragioni argomentative facciamo finta di provare a cambiare la colonna nella mia tabella users
in una rappresentazione di stringa anziché in un int.È possibile utilizzare le Migrazioni su rotaie per convertire i dati?
Nella mia migrazione ho questo;
def.self up
add_column :users, :age_text, :string
users = User.find(:all)
users.each do |u|
u.age_text = convert_to_text(u.age)
u.save
end
end
def self.convert_to_text(number)
#code here to convert 1 to 'one' etc
end
Ma non sembra funzionare, è quello che sto tentando qui anche con le migrazioni possibili?
Quale sarebbe un modo migliore? – Kirschstein
Dipende da cosa stai cercando di fare .. Se è necessario un semplice aggiornamento, puoi semplicemente eseguire un comando SQL con il metodo execute (esegui 'update user set colA = 1'). Ancora una volta, stai attento; se nella tabella Utenti sono presenti 10k utenti, è probabile che il ciclo di looping di ciascuno di essi con la migrazione precedente richieda molto tempo. –
A volte è necessario anche questo User.connection.schema_cache.clear! – hrdwdmrbl