0

我正在使用 rails v3.0.9 和 Mysql 数据库。

我正在使用现有数据迁移表。

我有用户表,所有其他表都包含 user_id 列,现在我需要将用户分成两个(用户和客户)表,

所以我需要使用现有用户记录迁移新客户表,其中用户键入客户

我需要创建一个客户表并将用户类型为客户的用户记录的 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 中,您可以通过提供执行方法来执行任何 sql 查询

例如:

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