2009-10-04 58 views
2

我有一个非常简单的迁移,增加了一个布尔柱:为什么这个简单的Rails迁移不能更新我的数据库?

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 

我运行迁移:

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

看起来桃色的,对不对?但是,由于某些原因,我的偏好设置表中仍然没有mute_audio列。

我找不出来。我之前执行过add_column,没有任何问题。

有没有人见过这种行为?

+2

您是否正在查看与您执行迁移相同环境的数据库? – Eimantas 2009-10-04 10:28:26

+0

那么,我只是在做rake db:migrate(没有指定env)。 我正在做ruby脚本/控制台来检查迁移后的模型。 在这两种情况下,它应该默认开发,对不对? – Altay 2009-10-04 10:37:32

+0

事实上,双重检查并不会造成伤害。你也可能想尝试迁移。如果它通过 - 确实增加了列。尾日志/ development.log也应该有帮助! – Eimantas 2009-10-04 10:41:09

回答

3

我认为没有理由导致列添加失败。您可能正在查看错误的数据库。

调试最好的方法是进入轨道控制台模式:

script/console development 

,并创建一个新的优先对象,并给mute_audio值:

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

第一个命令之后,你应该看到包含有关新创建对象的信息的一些输出。你应该看到它有mute_autio: false。如果设置属性mute_audio不会输出错误,则没有问题,并且新添加的列在那里。