I made a standard Active::Record class with a user_id field on it, and sure enough, the requirements changed. Turns out I needed to nix the ‘user_id’ column, and put on an ’email’ column instead. I figured I would just manually replace the field in the migration file and then do a quick ‘rake db:migrate down/up’ on that version to make the update. I even ended up updating db/schema.rb as well.
No Dice:
Failure/Error: ss = Factory(:model)
undefined method `email=' for #<Model:0xb2cc288>
I can use email getter/setter methods in the console, or in the service fine — but factory girl doesn’t seem to get the hint. Is it caching a method list somewhere? (Hint: mysql table looks good too)
Firstly, in the future, try really hard not to change existing migration files. You will mess up more than just FactoryGirl, namely you will mess up your teammates’ setups. Requirements change and that’s OK, you just make a new migration that drops the user_id column and adds an e-mail column. This way, the evolution of the data model will be recorded in the migrations.
For your specific problem, though, you probably want to run rake db:test:prepare or, if that doesn’t work, drop your test database completely and rebuild it.