I've decided to make a major change in my application which affects more than 1 model. I don't want to wipe all the data though. Here's the scenario I'm in: I have a Book model with a Chapter model. Book has many Chapters and Chapter belongs to Book. However, I want to add a Story model between them so that Book has many Stories and Stories has many Chapters. Is there a way I can make this change without wiping all my data?
on 2009-04-09 01:45
on 2009-04-09 10:42
What you're asking should be totally doable via Migrations. See http://guides.rubyonrails.org/migrations.html. Basically your flow should look something like: 1. Create stories table. 2. Add column chapters.story_id. 3. Find all chapters. 4. For each chapter: - Find or create the matching story. (Find params will depend on structure of story and chapter.) - story.book = chapter.book - chapter.story = story - chapter.book = nil 5. Remove column chapters.book_id. Could also write a one-off script to do this if you're more comfortable, but leveraging ActiveRecord in this case will make life easier no matter where you decide to implement it. HTH.