Complex JOIN with ActiveRecord and Rails 3

something like this should work for you, although it requires mixing in a little raw SQL

Post
  .joins("INNER JOIN memberships ON memberships.group_id = posts.group_id")
  .where(:memberships => {:user_id => current_user.id})

You can get closer without changing your model at all, by removing the unused join from your call:

Post.joins(group: :memberships).where(memberships: { user_id: 1 })

compiles to SQL

SELECT "posts".* FROM "posts"
INNER JOIN "groups" ON "groups"."id" = "posts"."group_id"
INNER JOIN "memberships" ON "memberships"."group_id" = "groups"."id" 
WHERE ("memberships"."user_id" = 1)