As an example, you can avoid many unnecessary queries here by operating on the association:

```ruby
ParticipantPersonLink.self_links.where(:participant_id => ineligible_participants).
  includes(:person => whatever_else).map(&:person).each(&:adjudicate_eligibility)
```

There's no `self_links` scope (AFAIK) but one could be written.  This has the benefit of eliminating a `#compact`, too, since you'll never get back a Participant without a Person this way.

Or, push it up a bit higher:

```ruby
ps = Participant.where(:id => current_participants.map(&:id)).includes(:participant_person_link => :person)  # and whatever else
in, el = ps.partition(&:ineligible?)

in.map(&:person).each(&:adjudicate_eligibility)
```