我正在使用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?
如果我出错了,请给我一些建议,以正确的方式做到这一点......
答案 0 :(得分:0)
Mysql允许插入具有primary id列值的记录。 在Rails中,您可以通过提供执行方法
来执行任何SQL查询例如:
sql = "insert into users(id, username) values(10, 'iam')"
ActiveRecord::Base.connection.execute(sql)