views:

17

answers:

1

I'm trying to run the following migration

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

and the u.reset_perishable_token! code behaves strangely (no return value, doesn't change the database field). Consequently change_column ..., :null => false fails with

users.perishable_token may not be NULL

Even separating the migration into two doesn't do the trick either if I run them with just one rake command.

Part One

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

    add_index :users, :perishable_token
end

Part Two

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

Only if I run the first and second migration in separate rake processes everything runs fine.

What could possibly be the reason and how can I fix it?