0

Rails v3.0.9 と Mysql データベースを使用しています。

既存のデータを使用してテーブルを移行しています。

ユーザー テーブルがあり、他のすべてのテーブルには user_id 列が含まれているため、ユーザーを 2 つの (ユーザーと顧客) テーブルに分ける必要があります。

したがって、ユーザータイプが顧客である既存のユーザーレコードを使用して、新しい顧客テーブルを移行する必要があります

顧客テーブルを作成し、ユーザー タイプを顧客としてユーザー レコードの ID を設定する必要があります。これは、他の多くのテーブル (顧客のみが使用する) を移行する代わりに、ユーザーのユーザー タイプを持つすべてのレコードをチェックして割り当てることで簡単になります。顧客テーブルの新しい ID。

テーブルは次のようになります

ユーザー テーブル:

    id  |       name    |   ...
   ------------------------------
    1   |       aaa     |   ...
    2   |       bbb     |   ...
    4   |       ddd     |   ...
    6   |       fff     |   ...

顧客テーブル

    id  |       name    |   ...
   -------------------------------
    3   |       ccc     |   ...
    5   |       eee     |   ...
    7   |       ggg     |   ...

ユーザーの既存のデータを移行するとき

私の移行ファイルで

def up
  create_table(:customers) do |t|
    t.string :name
  end

  User.joins(:user_type).where(:user_type => {:type_name => 'customer'}).find_in_batches(:batch_size => 100){ |users|
     users.each {|user|
          customer = Customer.new
          customer.id = user.id
          customer.name = user.name
          customer.save(:validate => false)
     }
   }
end

また試した

Customer.create!(:id => user.id) instead of save method

これは正しいです?

プライマリ ID を割り当てる方法はありますか?

私が間違っている場合は、正しい方法で行うための提案をしてください...

4

1 に答える 1

0

Mysql では、プライマリ ID 列の値を持つレコードを挿入できます。Railsでは、executeメソッドに指定することで任意のSQLクエリを実行できます

例えば:

sql = "insert into users(id, username) values(10, 'iam')"
ActiveRecord::Base.connection.execute(sql)
于 2013-02-01T07:11:07.970 に答える