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.

tip: stop webrick script/server (address already in use)

Quick tip of the day.

Somehow you’ve got out of the script/server console (ctrl-Z instead of ctrl-C perhaps), but the server is still running, as you get this message if you try to start a new one
“TCPServer Error: Address already in use – bind(2)”

type “jobs” and you will see it there. (should be number 1)

type “fg 1” to bring theĀ  server back and then if you want, ctrl-C to quit it