class RemoveTableArticlePrices < ActiveRecord::Migration[4.2] def self.up puts 'create columns in articles ...' add_column 'articles', 'clear_price', :decimal, precision: 8, scale: 2, default: 0.0, null: false add_column 'articles', 'gross_price', :decimal, precision: 8, scale: 2, default: 0.0, null: false add_column 'articles', 'tax', :float add_column 'articles', 'refund', :decimal, precision: 8, scale: 2, default: 0.0, null: false add_column 'articles', 'unit_quantity', :integer, default: 1, null: false add_column 'articles', 'order_number', :string add_column 'articles', 'created_at', :datetime add_column 'articles', 'updated_at', :datetime # stop auto-updating the timestamps to make the data-copy safe! Article.record_timestamps = false puts 'now copy values of article_prices into new articles-columns...' Article.find(:all).each do |article| price = article.current_price article.update!(clear_price: price.clear_price, gross_price: price.gross_price, tax: price.tax, refund: price.refund, unit_quantity: price.unit_quantity, order_number: price.order_number, updated_at: price.updated_on, created_at: price.updated_on) end puts 'delete article_prices, current_price attribute' drop_table :article_prices remove_column :articles, :current_price_id end def self.down add_column :articles, :current_price_id, :integer create_table 'article_prices', force: true do |t| t.integer 'article_id', default: 0, null: false t.decimal 'clear_price', precision: 8, scale: 2, default: 0.0, null: false t.decimal 'gross_price', precision: 8, scale: 2, default: 0.0, null: false t.float 'tax', default: 0.0, null: false t.decimal 'refund', precision: 8, scale: 2, default: 0.0, null: false t.datetime 'updated_on' t.integer 'unit_quantity', default: 1, null: false t.string 'order_number' end # copy data from article now into old ArticlePrice-object Article.find(:all).each do |article| price = ArticlePrice.create(clear_price: article.clear_price, gross_price: article.gross_price, tax: article.tax, refund: article.refund, unit_quantity: article.unit_quantity, order_number: article.order_number.presence, updated_on: article.updated_at) article.update_attribute(:current_price, price) price.update_attribute(:article, article) end # remove new columns remove_column 'articles', 'clear_price' remove_column 'articles', 'gross_price' remove_column 'articles', 'tax' remove_column 'articles', 'refund' remove_column 'articles', 'unit_quantity' remove_column 'articles', 'order_number' remove_column 'articles', 'created_at' remove_column 'articles', 'updated_at' end end