我正在使用AR-Extensions将大量对象导入数据库,但是将它们从数据库中同步回来是不行的。
我的代码:
posts = [Post.new(:name=>"kuku1"), Post.new(:name=>"kuku2"), ...]
Post.import posts, :synchronize=>posts
将帖子提交给db,并且每个帖子都会自动分配主键(id)。但是当事后检查posts数组中的对象时,我发现它们没有id字段,而new_record标志仍然是真的。 我也尝试添加:reload => true,但这也无济于事。
知道为什么同步不起作用?
答案 0 :(得分:3)
现在无法使用新记录。从ar-extensions 0.9.3开始,这在同步新记录时不起作用,因为同步期望你正在同步的记录已经存在。它使用封面下的主键来确定要加载的内容(但是对于新记录,主键是nil)。此限制*也存在于activerecord-import 0.2.5中。如果你可以在其他条件下同步,我很乐意发布一个允许传入条件的新gem。对于Rails 3.x你需要使用activerecord-import(它取代了ar-extensions)。请在github上创建票证/问题:https://github.com/zdennis/activerecord-import/issues
对于Rails 2.x你仍然想要使用ar-extensions,我可能会向后移动activerecord-import更新并推出一个新的gem。如果您想在此处使用此功能,请在github上创建一个票证/问题:https://github.com/zdennis/ar-extensions/
也欢迎补丁。
* 这里的限制是一个数据库约束,因为在单个插入/导入之后不可能获得所有新创建的记录的id而不做像表锁定这样的奇怪事情,我认为这不是一个好的解决这个问题。如果有人有想法,我会全力以赴。
<强>更新强>
activerecord-import 0.2.6和ar-extensions 0.9.4已经发布,包括支持指定要同步的字段。那些字段应该是唯一的。见http://www.continuousthinking.com/2011/4/6/activerecord-import-0-2-6-and-ar-extensions-0-9-4