Forum: Ruby on Rails Fetch record based on many to many association

Posted by Linus Pettersson (Guest)
on 2013-02-20 20:22
(Received via mailing list)
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)
Posted by javinto (Guest)
on 2013-02-21 16:13
(Received via mailing list)
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 Pettersson het
volgende:
Posted by Matt Jones (Guest)
on 2013-02-22 18:59
(Received via mailing list)
On Wednesday, 20 February 2013 14:20:46 UTC-5, Linus Pettersson 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 Jones
Please log in before posting. Registration is free and takes only a minute.
Existing account (Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
No account? Register here.