I am having problem with how the primary key gets incremented when I delete_all from a table and start inserting again. This is problematic because I have other models that are associated with the purged table. For example, if I have Apple that belongs_to Computer, then when I purge the Computer table and re-add the computer, the associations get messed up because Apple now has infant computer_id in its rows. I want to be able to reset the primary key of the computer so that when I re-add the computer, the association still stays intact. How should I go about doing this in rails?
Edit
I am very sorry for not being clear about this, but now I will tell you want I want to do. I want a user to be associated with a machine (computer). A computer has his own id and can only be created by the admin. There are a fixed amount of computer in the computer table.
User
belongs_to :computer
Computer
has_many :users
The problem that I am facing is that, I have the computer table pre-loaded inside seeds.rb/some rakefile. When I start up my app, I want to just run the file that first deletes everything and then pre-loads the table. This will let the user choose a computer only from the ones provided in the computer table. I want to be able to run this script again (say in heroku console, without dropping the User table) and still get the same id associated to each machine (and thus to each user). I am confused on how I should do this. Please let me know if I should do this differently.
First, you shouldn’t do it! If you want to change record, then just update rows in your table. Don’t delete it and reinsert it! If you still want to do it, then you should delete all associated rows in other tables and insert both computers and apples.
I don’t know Rails way of reseting auto increment primary key, but if you use mysql then you can run custom query:
it should reset auto increment value to next available number.
EDIT:
How to load data with
id.I’m not sure if loading with seeds can do it, but for sure using fixtures can help. What you need is to prepare
computers.ymlfile with data:etc.
Then you can use this to load it to db:
But it will reset whole table (all rows will be deleted and reinserted – but you can keep your ids).
Again I want to warn you that it is bad idea to load data this way. Fixtures/seeds should be used only to seed your db with initial (needed to start your application) data.
Why do you want to reset this table?