class AddUrlToOptimizedImages < ActiveRecord::Migration def up # add a nullable url column add_column :optimized_images, :url, :string # compute the url for existing images execute "UPDATE optimized_images SET url = substring(u.url from '^\/uploads\/[^/]+\/') || '_optimized/' || substring(oi.sha1 for 3) || '/' || substring(oi.sha1 from 4 for 3) || '/' || substring(oi.sha1 from 7 for 11) || oi.extension FROM optimized_images oi JOIN uploads u ON u.id = oi.upload_id WHERE optimized_images.id = oi.id;" # change the column to be non nullable change_column :optimized_images, :url, :string, null: false end def down remove_column :optimized_images, :url end end