I am currently trying to run this migration:
class AddDroppedProjectsCountToUser < ActiveRecord::Migration def self.up add_column :users, :dropped_projects, :integer, {:default=>0, :required=>true} end def self.down remove_column :users, :dropped_projects end end
The column is added correctly, but none of the old records are populated with 0. They are nil. I have tried using default=>'0'
as well, to no avail. Any idea why this might be happening? (Rails 3.0.3)
Edited to add: When I create a new user it works fine, and everything looks correct. It’s just the old users that still have nil for that value in the table.
Advertisement
Answer
What happens if you say:
def self.up add_column :users, :dropped_projects, :integer, :null => false, :default => 0 end
instead? Without the :null=>false
you’re still allowing NULL
in dropped_projects
so there’s no reason for PostgreSQL to make them 0. Also, I don’t think :required
is a valid option for add_column
; since the options are just a simple Hash
and add_column
only looks for options it knows about, your stray :required
option is silently ignored.