2009-10-04 9 views
2

J'ai une migration très simple qui ajoute une seule colonne booléenne:Pourquoi cette simple migration de Rails ne met-elle pas à jour ma base de données?

class AddMuteToPreferences < ActiveRecord::Migration 
    def self.up 
    add_column :preferences, :mute_audio, :boolean, :default => false 
    end 

    def self.down 
    remove_column :preferences, :mute_audio 
    end 
end 

Je lance la migration:

== 81 AddMuteToPreferences: migrating ========================================= 
-- add_column(:preferences, :mute_audio, :boolean, {:default=>false}) 
    -> 1.9043s 
== 81 AddMuteToPreferences: migrated (1.9047s) ================================ 

Attend Peachy, non? Mais, pour une raison quelconque, il n'y a toujours pas de colonne mute_audio dans ma table des préférences.

Je n'arrive pas à comprendre. J'ai déjà exécuté add_column sans problème.

Quelqu'un a déjà vu ce comportement auparavant?

+2

Visionnez-vous la base de données du même environnement dans lequel vous avez effectué la migration? – Eimantas

+0

Eh bien, je ne fais que rake db: migrate (no env spécifié). Et je suis en train de faire un script/une console ruby ​​pour examiner le modèle après la migration. Dans les deux cas, il devrait être développé par défaut, n'est-ce pas? – Altay

+0

En effet, mais le double contrôle ne fait pas de mal. Aussi, vous pouvez vouloir essayer la migration vers le bas. Si ça passe - la colonne a été ajoutée en effet. Tailing log/development.log devrait aussi aider! – Eimantas

Répondre

3

Je ne vois aucune raison pour que les rails échouent à l'ajout de la colonne. Vous cherchez probablement dans la mauvaise base de données.

La meilleure façon de déboguer c'est pour passer en mode console rails:

script/console development 

Et créer un nouvel objet de préférence et donner mute_audio une valeur:

>> p = Preference.new 
(...) 
>> p.mute_audio = true 

Après la première commande, vous devriez voir une sortie contenant des informations sur l'objet nouvellement créé. Vous devriez voir qu'il a mute_autio: false. Si la définition de l'attribut mute_audio ne génère pas d'erreur, il n'y a pas de problème et la nouvelle colonne ajoutée est présente.

Questions connexes