Tente isto:
User.select('users.*,MAX(donations.created_at) as most_recent_donation').
joins(:donations).order('most_recent_donation desc').group('users.id')
Suponho que um usuário tenha muitas doações, isso selecionaria a doação criada mais recente e selecionaria usuários distintos filtrando por seu id.
Eu não testei isso embora.