Alternative answer:
I added a last_post_at column to the Thread table. When a new post is created it updates this value.
I was then able to set the default scope ordering.
default_scope order('last_post_at DESC')
Advantage: Do not need to load all the posts when creating the ordered list of Threads for a forum. Disadvantage: Maintaining another column on the Thread model.