Я знаю SQL для этого.
def self.up
create_table :files do |t|
t.string :name
t.string :doc_name
t.string :doc_type
t.string :doc_size
t.string :cat
end
execute "INSERT INTO create_table(name, doc_name, doc_type, doc_size, cat)
SELECT name, doc_name, doc_type, doc_size, cat FROM attachments
UNION
SELECT name, doc_name, doc_type, doc_size, cat FROM media"
drop_table :attachments
drop_table :media
end
Не проверено, но должно работать.