Аутлогическая проблема только при миграции в рельсы 3 проекта - PullRequest
0 голосов
/ 16 сентября 2010

Я пытаюсь запустить следующую миграцию

def self.up
    add_column :users, :perishable_token, :string
    User.all.each { |u| u.reset_perishable_token! }
    change_column :users, :perishable_token, :string, :null => false

    add_index :users, :perishable_token
end

и код u.reset_perishable_token! ведут себя странно (нет возвращаемого значения, поле базы данных не изменяется). Следовательно change_column ..., :null => false терпит неудачу с

users.perishable_token may not be NULL

Даже разделение миграции на две части тоже не сработает, если я выполню их одной командой rake.

Часть первая

def self.up
    add_column :users, :perishable_token, :string

    add_index :users, :perishable_token
end

Часть вторая

def self.up
    User.all.each { |u| u.reset_perishable_token! }
    change_column :users, :perishable_token, :string, :null => false
end

Только если я запускаю первую и вторую миграцию в отдельных процессах rake, все работает нормально.

В чем может быть причина и как я могу это исправить?

1 Ответ

1 голос
/ 03 ноября 2010

Я думаю, вам нужно добавить ...

User.reset_column_information

... после добавления perishable_token в users_table, в противном случае модель User не синхронизируется с базой данных.

Я думаю, что модель User будет загружаться только один раз за 'rake db: migrate', так что это не поможет разделить миграцию на две части.

...