Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Default value not populating in migration with Rails and Postgresql

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.

like image 353
Dave G Avatar asked Mar 04 '11 18:03

Dave G


1 Answers

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.

like image 178
mu is too short Avatar answered Sep 23 '22 18:09

mu is too short