Ruby on Rails Thursday, February 21, 2013

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:

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)

--
You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email to rubyonrails-talk+unsubscribe@googlegroups.com.
To post to this group, send email to rubyonrails-talk@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msg/rubyonrails-talk/-/hehyXdhYdQAJ.
For more options, visit https://groups.google.com/groups/opt_out.
 
 

No comments:

Post a Comment