2009-10-04 7 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

+0

Ну, я просто делаю rake db: migrate (не указано env). И я делаю ruby ​​script/console, чтобы изучить модель после миграции. В обоих случаях он должен по умолчанию разрабатывать, не так ли? – Altay

+0

Действительно, но двойная проверка не повредит. Также вы можете попробовать перейти вниз. Если он пройдет - столбец был добавлен действительно. Хвост log/development.log тоже должен помочь! – Eimantas

ответ

3

Я не вижу причины, по которой рельсы не могут добавить столбец. Вероятно, вы ищете неправильную базу данных.

Лучший способ отладки это ввести рельсы режим консоли:

script/console development 

И создать новый объект предпочтений и дать mute_audio значение:

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

После первой команды, вы должны см. некоторый вывод, содержащий информацию о вновь созданном объекте. Вы должны увидеть, что он имеет mute_autio: false. Если установка атрибута mute_audio не выводит ошибку, нет проблем, и добавляется новый добавленный столбец.

Смежные вопросы