2017-11-10 8 views
-1

いくつかの列を抽出するために別のテーブルを作成する必要がありました I my_tables多くの列がありますが、いくつかの列を抽出して別の場所で使用する必要がありました。既存のデータを保持する

だから、だから私は、私の移行をロールバックし、私が推測するいくつかのSQLを挿入する必要がmy_new_tableは存在しますが、それは私が列usermy_tablesguestに持っていたデータを持っていない... ? my_tablesuser & guestからデータを取得しますか? どうすればいいですか?

+0

私はあなたの質問を理解することができません。 –

+0

JFYIでは、「データ」はすでに複数です。対応する単数形は「データム」です。 –

答えて

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 
+0

これは、私が最後にやったことです。これは解決策でした:) – NEL

関連する問題