Forum: Ruby on Rails changing database structure without wiping

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Mike C. (Guest)
on 2009-04-09 01:45
(Received via mailing list)
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?
Chris K. (Guest)
on 2009-04-09 10:42
(Received via mailing list)
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.
This topic is locked and can not be replied to.