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)
on 2013-02-20 20:22
on 2013-02-21 16:13
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:
on 2013-02-22 18:59
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
Log in with Google account | Log in with Yahoo account
No account? Register here.