Prova questo:
User.select('users.*,MAX(donations.created_at) as most_recent_donation').
joins(:donations).order('most_recent_donation desc').group('users.id')
Suppongo che un utente abbia molte donazioni, questo selezionerebbe la donazione creata più di recente e selezionerebbe utenti distinti filtrando in base al loro ID.
Tuttavia non l'ho testato.