Adding a primary key id to table in rails

Just a quick little tip in case someone searches for it.

I have a table that was used for a has_and_belongs_to_many (habtm) relationship – which was great earlier on. As the application grew, needed to change to a has_many :through (hmt) relationship – using this table as a model etc. Now. initially, I used “:id => false” when creating the habtm join table (Mahmoud tells you why).

But one needs an primary key id on hmt join tables. So created a migration:
def self.up
add_column :table_name, :id, :primary_key
end

def self.down
remove_column :table_name, :id
end

And it added an id column to the table in the correct data type (integer) and gave id values to the existing records. sweet.

Also note that you don’t have to give the :id column a datatype, as to rails :primary_key is a datatype.