Activerecord-import记录彼此之间的关系

时间:2014-09-16 23:36:13

标签: ruby-on-rails activerecord ruby-on-rails-4 rails-activerecord

我的应用需要一次导入数百到数千条记录。记录是树结构中的每个节点。我正在使用activerecord-import来显着加快导入速度,还没有确定哪个祖先,closure_tree,acts_as_list或用于设置层次结构的自定义解决方案。

我正在努力解决的问题是如何在一次或几次传递中导入所有数据和关系。我的草案天真的解决方案是:

  • 在内存中创建每个对象,并手动为每个对象提供一个id;
  • 使用这些id手动为每个对象提供所需的foreign_key(例如parent_id);然后
  • 使用activerecord-import
  • 批量导入生成的对象数组

这感觉就像一个有明显问题的黑客。例如,如果在我仍然实例化我的对象时数据库使用了我为我的对象选择的id,那么我手动设置的关系就变得无用/错误。

另一个主要问题是,当我研究树数据结构的更高级解决方案(例如closure_tree和ancestry)时,手动设置这些gems所需的字段感觉越来越像黑客。

所以我想我的问题是,是否有一种干净的方法可以在rails activerecord数据库中设置N个节点的树结构,同时触摸数据库少于N次?

1 个答案:

答案 0 :(得分:0)

主分支有一个commit具有此功能。它只适用于Rails 4和Postgres。

如果您碰巧有其他配置,则需要:

  1. 创建一个新的模型/哈希数组
  2. Model.import
  3. 检索刚刚插入的行的ID
  4. 转到1,在新数组中设置刚刚检索到的ID(parent_id)