On Dec 6, 2010, at 11:47 PM, Rick R wrote:

I'm curious on the best practice to remedy this situation...

I created a habtm migration but forgot the :id => false

I ran the migration (rake db:migrate)

I tried to run my tests and then go the error that made me realize I forgot the :id => false.

The question is how do I back out my changes?

Typically I do rake db:migrate VERSION=0
But that also gave me the same error about "Primary key is not allowed in a has_and_belongs_to_many join table"

So I then fired up dbconsole and manually dropped the table.

But now I even if I run rake db:migrate the join table isn't created - probably because it 'think' it had run it previously.

I also can't run db:migrate VERSION=0, since it tries to call the drop table on the table that I manually dropped.

I managed to get things working by commented out my drop_table command in my migration and then running db:migrate VERSION=0, then doing rake db:migrate and now I'm ok, but I'd think there would have been easier approach to fix things?

--
Rick R

Well, there are at least two ways:

1) Create a table with the same name so that the down migration will be able to DROP it and then recreate it.
        rake db:migrate:redo
   might work for this (since you didn't specify your rails version)

2) Make db:migrate think that you're at the right version
2a) for older ActiveRecord, set the version in the schema_info table from the database console
                update schema_info set version = ###;
2b) for newer ActiveRecord, remove the migration from the schema_migrations table
                delete from schema_migrations where version = "201012ddhhmmss";

Then you can run your db:migrate (which you've already fixed).

-Rob

Rob Biedenharn          
[email protected]     http://AgileConsultingLLC.com/
[email protected]               http://GaslightSoftware.com/

--
You received this message because you are subscribed to the Google Groups "Ruby on 
Rails: Talk" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-talk?hl=en.

Reply via email to