Forum: Ruby on Rails Where should data migrations go?

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.
583d7d066b30d8d38df7d7c2e9e78045?d=identicon&s=25 Anthony Ettinger (Guest)
on 2008-11-14 23:22
(Received via mailing list)
I recall problems with putting data migrations directly into a
database migration file.
Where should I do them?

I need to run a few SQL queries on the database, and then delete a few
unnecessary things.
Something like this pseudo example:

#get ids of old softwares
old_ids = SELECT id FROM softwares WHERE name IN ('foo', 'bar');
good_id = SELECT id FROM softwares WHERE name = 'Good';

#get directories using old softwares
SELECT id, software_id FROM directories WHERE software_id IN
(old_ids.join(','));

#update these directories with new software
UPDATE directories SET software_id = good_id WHERE software_id IN
(old_ids.join(','));

#delete old softwares
DELETE from softwares WHERE id IN (old_ids.join(','));

There is no change to the database schema itself, should this be a
throw-away rake task or is can it be done as a "DATA ONLY" migration?




--
Anthony Ettinger
408-656-2473
http://anthony.ettinger.name
3f38541776a2513a20ea2f1c2d522cb3?d=identicon&s=25 Perry Smith (pedz)
on 2008-11-15 04:17
How about just a small script that you run with "script/runner" ?
53be54e5db4dc58e4980db5a8255621b?d=identicon&s=25 Harold (Guest)
on 2008-11-15 05:49
(Received via mailing list)
I do "data only" migrations all the time, especially for reference
values and such. What kind of problems do you encounter? The one
caveat could be that you may have to define the model classes involved
inside your migration. For example:

class Software < ActiveRecord::Base; end

and in your self.up, simply use it as you would normally, ie:

Software.find_all_by_name(['foo','bar']).each do |s|
  # do some updates and saves with s
end

hope that helps.

-H
Eaa0d4b131fc4058422ba68f8902969d?d=identicon&s=25 Steve Austen (steveausten555)
on 2010-11-26 21:04
hi its seems like you have done a hard work on it. I have got lots of
information from your post. Really appreciate your work.!! It was
describe very nicely keep us doing good work..
www.dealsourcedirect.com/toy-story-lamp.html
Dd2d775dea75b381edb1bbf0600a0907?d=identicon&s=25 Marnen Laibow-Koser (marnen)
on 2010-11-27 23:00
Anthony Ettinger wrote in post #749437:
> I recall problems with putting data migrations directly into a
> database migration file.

What you recall are problems with putting *seed data* into migration
files.  Migrations are for changing the database schema only.

Sometimes, however, changing the schema involves moving data around to
fit the new schema.  Those operations should go in the same migration
that changes the schema.

> Where should I do them?
>
> I need to run a few SQL queries on the database, and then delete a few
> unnecessary things.
> Something like this pseudo example:
>
> #get ids of old softwares
> old_ids = SELECT id FROM softwares WHERE name IN ('foo', 'bar');
> good_id = SELECT id FROM softwares WHERE name = 'Good';
>
> #get directories using old softwares
> SELECT id, software_id FROM directories WHERE software_id IN
> (old_ids.join(','));
>
> #update these directories with new software
> UPDATE directories SET software_id = good_id WHERE software_id IN
> (old_ids.join(','));
>
> #delete old softwares
> DELETE from softwares WHERE id IN (old_ids.join(','));
>
> There is no change to the database schema itself, should this be a
> throw-away rake task or is can it be done as a "DATA ONLY" migration?

That should be a rake task or something, if I understand correctly what
you're doing.  It should not be a migration.

>
>
>
>
> --
> Anthony Ettinger
> 408-656-2473
> http://anthony.ettinger.name

Best,
--
Marnen Laibow-Koser
http://www.marnen.org
marnen@marnen.org
This topic is locked and can not be replied to.