rails如何用id创建记录

时间:2013-01-30 16:47:01

标签: mysql ruby-on-rails-3 migration

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

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

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

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

我需要创建一个customers表并设置用户类型为客户的用户记录的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?

如果我出错了,请给我一些建议,以正确的方式做到这一点......

1 个答案:

答案 0 :(得分:0)

Mysql允许插入具有primary id列值的记录。 在Rails中,您可以通过提供执行方法

来执行任何SQL查询

例如:

sql = "insert into users(id, username) values(10, 'iam')"
ActiveRecord::Base.connection.execute(sql)