Ett fräsigt sätt att i Ruby definiera sitt databas-schema. När schemat växer lägger man till en ny migrationsfil. Ett enkelt kommando – rake db:migrate
skapar SQL för den aktuella databas-adaptern.
Schema as code. Very agile.
API-dokumentationen berättar mera
Tumregel: en bra tumregel är att aldrig ändra data i migrationer. Det är bättre att göra det i rake-tasks, eftersom då slipper man eventuella Migration-meck.
Följande data-flyttnings-task kommer från Albert:
namespace :adocca do
desc "Clean orphaned user images"
task :clean_profile_images => :environment do |t|
Image.find_all_by_attachable_type('User').each do |i|
i.destroy unless User.find(i.attachable_id).image.id == i.id
end
end
end
Ovanstående körs alltså med rake adocca:clean_profile_images
. Notera att Railsmiljön laddas genom att göra en dependency (:environment) på :clean_profile_images
OlleJonsson: Jag hade problem med kommandot rename_column
, som satte datat i kolumnen till NULL (under sqlite3). (Faktiskt även senare.)
Branstrom: Togs alltså all data bort, eller var det bara att den blev null-by-default?: http://dev.rubyonrails.org/ticket/6999 (MySQL drops options during rename_column)