Skip to content

Instantly share code, notes, and snippets.

@gnfisher
Forked from tlowrimore/union_scope.rb
Created January 9, 2018 17:39
Show Gist options
  • Save gnfisher/4509c4cea4642045111b2aa0d76a7ea1 to your computer and use it in GitHub Desktop.
Save gnfisher/4509c4cea4642045111b2aa0d76a7ea1 to your computer and use it in GitHub Desktop.
Unions multiple scopes on a model, and returns an instance of ActiveRecord::Relation.
module ActiveRecord::UnionScope
def self.included(base)
base.send :extend, ClassMethods
end
module ClassMethods
def union_scope(*scopes)
id_column = "#{table_name}.#{primary_key}"
sub_query = scopes.map { |s| s.select(id_column).to_sql }.join(" UNION ")
where "#{id_column} IN (#{sub_query})"
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment