Kai Fu
Kai Fu

Reputation: 27

Activerecord-import records with relationships to each other

My app needs to import hundreds to thousands of records at a time. The records are each nodes in a tree structure. I'm using activerecord-import to significantly speed up the import, and haven't yet settled on which of ancestry, closure_tree, acts_as_list or a custom solution to use for setting out the hierarchy.

The problem I'm grappling with is how to import all the data and relationships in one or just a few passes. My draft naive solution is:

This feels like a hack with obvious problems. For example, if the ids that I've chosen for my objects get used by the database while I'm still instantiating my objects, then the relationships I've manually set become useless/wrong.

Another major problem is that as I look into more advanced solutions for the tree data structure (eg closure_tree and ancestry), manually setting the fields required by those gems feels more and more like a hack.

So I guess my question is, is there a clean way to set up a tree structure of N nodes in a rails activerecord database while touching the database less than N times?

Upvotes: 1

Views: 1153

Answers (1)

laffuste
laffuste

Reputation: 17095

The master branch has a commit with this functionality. It will work only with Rails 4 and Postgres.

If you happen to have another configuration, you will need to:

  1. Create a new array of Models/hashes
  2. Model.import it
  3. Retrieve the IDs of the rows you just inserted
  4. Goto 1, setting in the new array the IDs (parent_id) you just retrieved

Upvotes: 0

Related Questions