Fetch record based on many to many association

Hi

Let’s say I have three models, Company, User and Entry (and a join model
EntryParticipants).

Company has many Users, a User has many Entries (Entries created by a
User).
Also, there is another many-to-many relationship between User and Entry
(a
User can participate in many entries and an Entry can have many
participants).

So, now I want to fetch all Entries that a User has created OR is
participating in. I’m a bit stuck though…

user.entries => All entries created by this user
user.participated_entries => All participated entries

But now I want to get them all in one query. The code below is working,
but
is there a more efficient way to do it?

scope.includes(:entry_participants).where("(entry_participants.participated_entry_id
= entries.id) OR entries.user_id = ?", user.id)

Why bother and not doing:

(user.entries + user.participated_entries).uniq

I wonder if a complicated single query is must faster…

Op woensdag 20 februari 2013 20:20:46 UTC+1 schreef Linus P. het
volgende:

On Wednesday, 20 February 2013 14:20:46 UTC-5, Linus P. wrote:

participants).

scope.includes(:entry_participants).where("(entry_participants.participated_entry_id

= entries.id) OR entries.user_id = ?", user.id)

If it makes sense for your domain model, adding some logic to enforce
that
the user who created the Entry is always also a participant makes this
trivial.

–Matt J.