Skip to content

Instantly share code, notes, and snippets.

@michaelminter
Created July 30, 2019 17:12
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save michaelminter/6d9778b73d8b9d58e827f38dcb3fef52 to your computer and use it in GitHub Desktop.
Save michaelminter/6d9778b73d8b9d58e827f38dcb3fef52 to your computer and use it in GitHub Desktop.
scope :by_persons, ->(person1, person2) do
arel = Communication.arel_table
up_context1 = arel.grouping(arel[:sender_type].eq(person1.class.name).and(arel[:sender_id].eq(person1.id)))
dn_context1 = arel.grouping(arel[:sender_type].eq(person2.class.name).and(arel[:sender_id].eq(person2.id)))
up_context2 = arel.grouping(arel[:recipient_type].eq(person1.class.name).and(arel[:recipient_id].eq(person1.id)))
dn_context2 = arel.grouping(arel[:recipient_type].eq(person2.class.name).and(arel[:recipient_id].eq(person2.id)))
context1 = arel.grouping(up_context1.or(dn_context1))
context2 = arel.grouping(up_context2.or(dn_context2))
where(context1.and(context2))
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment