保持现有数据

时间:2017-11-10 12:24:39

标签: sql ruby ruby-on-rails-4

我必须创建另一个表来提取一些列 我my_tables有很多列,但需要提取一些才能在其他地方使用。

所以my_new_table存在,但它没有user中的guestmy_tables列中的数据... 所以我必须回滚我的迁移并插入一些SQL我猜?从my_tables user & guest获取数据? 怎么办呢?

class CreateMyNewTables < ActiveRecord::Migration
  def change
    create_table :my_new_tables do |t|
      t.string :user
      t.string :guest
      t.references :my_tables, index: true
      t.timestamps null: false
    end

      #how to keep the data I already have in Guest and User

    remove_column :my_tables, :guest
    remove_column :my_tables, :user

  end
end

1 个答案:

答案 0 :(得分:0)

如果表格不是太大,最简单的方法可能是在迁移过程中使用几行Ruby代码复制数据。这有利于使用现有的关联和验证,并且代码更易于阅读和理解Ruby开发人员。

在巨大的表上,我建议在普通的SQL中进行,因为这会更快。

我假设您同时拥有MyTableMyNewTable型号。

def up
  create_table :my_new_tables do |t|
    t.string :user
    t.string :guest
    t.references :my_tables, index: true
    t.timestamps null: false
  end

  MyNewTable.reset_column_information
  MyTable.find_each do |table|
    MyNewTable.create(user: table.user, guest: table.guest, my_table: table)
  end

  remove_column :my_tables, :guest
  remove_column :my_tables, :user
end