Skip to content


Subversion checkout URL

You can clone with
Download ZIP


Optimize Tree.hash_tree #24

rewritten opened this Issue · 3 comments

2 participants


Right now it just executes the :hash_tree method for each root. So it's potentially a O(N) query. It can be done in one swipe, preloading by generation including the roots:

scope ="categories.*, category_hierarchies.*").
     joins("left join category_hierarchies on ancestor_id =").
     order("parent_id IS NOT NULL, generations ASC, name")
@mceachen mceachen was assigned

You're correct, the class #hash_tree method does do 1 select for every root, but your scope won't work, as it hides the root nodes, nor does it respect the :limit_depth option.

I'll see what I can do.


v3.6.3 uses 1 query now.

@mceachen mceachen closed this

You are right it does not take into account the :limit_depth option, but the roots are loaded first because of the left join and the parent_id is not null first order key (so roots are listed first). In any case it was just a hint, I didn't mean to provide a comlpete solution... Thanks for citing me in the changelog.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Something went wrong with that request. Please try again.