Skip to content

Instantly share code, notes, and snippets.

@raeno
Created October 21, 2014 06:58
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save raeno/8beaa77e0b5a86c2a9ec to your computer and use it in GitHub Desktop.
Save raeno/8beaa77e0b5a86c2a9ec to your computer and use it in GitHub Desktop.
Two outer joins on same table with Arel
messages = Message.arel_table
messages2 = Message.arel_table.alias('messages2')
messages3 = Message.arel_table.alias('messages3')
users = User.arel_table
manager = Arel::SelectManager.new(Message.arel_engine)
manager.project users[:first_name], users[:last_name], messages[:created_at]
manager.from messages
manager.join(messages2, Arel::Nodes::OuterJoin).on(messages[:created_at].eq(messages2[:created_at]))
manager.join(messages3, Arel::Nodes::OuterJoin).on(messages[:recipient_id].eq(messages3[:recipient_id]))
manager.join(users).on(users[:id].eq(messages[:sender_id]))
manager.group users[:first_name], users[:last_name]
manager.to_sql
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment