scope_tool.rb
369 Bytes
module ScopeTool
  # Sum scope results by SQL, allowing post filtering of the group.
  def union(*scopes)
    model = scopes.first.klass.name.constantize
    scopes = scopes.map &:to_sql
    model.from "(\n#{scopes.join("\nUNION\n")}\n) as #{model.table_name}"
  end
  class << self
    # Allows to use `ScopeTool.method()` anywhere.
    include ScopeTool
  end
end