2017-07-11 1 views
0

J'ai une table Info avec un champ age qui est un intModification d'un type de champ avec une migration

Mais je veux changer le type à un date afin que je puisse calculer dynamiquement l'âge.

J'ai donc fait cette migration:

class ChangeDateFormatInInfo < ActiveRecord::Migration[5.0] 
    def change 
    change_column :infos, :age, :date 
    end 
end 

Mais il y avait une DatatypeMismatch

column "age" cannot be cast automatically to type date 

Alors je l'ai changé:

change_column :infos, :age, :date, 'USING age::date' 

Mais il me donne encore

migrateTypeError: no implicit conversion of Symbol into Integer 

Je ne comprends pas vraiment, je lui dis de le convertir, alors qu'est-ce que je fais mal?

Répondre

1

Vous devez d'abord supprimer la colonne, puis l'ajouter à nouveau avec un nouveau type de données.

Donc, essayez ci-dessous le code:

rails g migration ChangeDateFormatInInfo 

puis goto fichier db/migrate/change_date_format_in_info_xxxx.rb et ouvrez-le.

Ajouter ci-dessous le code dans le fichier de migration:

class ChangeDateFormatInInfo < ActiveRecord::Migration[5.0] 
    def change 
    remove_column :infos, :age 
    add_column :infos, :age, :date 
    end 
end 

puis exécutez la commande suivante:

rake db:migrate 
0

N'a pas pensé à cela, je viens de faire une migration pour laisser tomber le champ, et un autre pour ajouter un champ. Fait maintenant :)

rails g migration remove_age_from_info age:integer 

rails g migration add_age_to_info age:date