Matt Hodan
2010-Oct-15 02:06 UTC
Struggling with a complex Rails 3 query (user.friends.checkins)
I''m working on a social networking application and am trying to build
a complex query that efficiently pulls all of a users''
friends''
checkins from the database. Basically I need: "user.friends.checkins"
I''ve recreated (in simplified form) the data structure below for
reference and included several solutions I''ve found, however I feel
like my solutions are sub-optimal. I''m hoping that someone can point
out a better way... So here goes:
# === My Solutions ==I tried this first, which works, but is way too slow given
that users
typically have +1000 friends each:
=> Checkin.where(:user_id => self.friends)
Then I tried this, which also works and is much faster, but feels
sloppy:
=> Checkin.joins(:user).joins(''INNER JOIN "friendships" ON
"users"."id" =
"friendships"."friend_id"'').where(:friendships
=>
{:user_id => 1})
Any help you can provide would be GREATLY appreciated! Thanks in
advance!!!
# === Data structure ==# Users table columns: id, name
# Friendships table columns: user_id, friend_id
# Checkin table columns: id, location, user_id
# === Models ==class User
has_many :friendships
has_many :friends, :through => :friendships
has_many :checkins
end
class Friendship
belongs_to :user
belongs_to :friend, :class_name => ''User''
end
class Checkin
belongs_to :user
end
--
You received this message because you are subscribed to the Google Groups
"Ruby on Rails: Talk" group.
To post to this group, send email to
rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org
To unsubscribe from this group, send email to
rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en.