Use sort_by and supply an array of values. It will compare them in order from left to right. Default sort is ascending, so if you want the opposite (e.g. matches_won should sort descendingly so that most matches one comes first, as opposed to matches_lost, which should sort lowest to highest), you need to negate the value.
Here's an example
require 'pp'
Team = Struct.new :won, :lost, :demerits, :style
teams = Array.new(20) { Team.new rand(5), rand(5), rand(5), rand(5) }
puts "Before sort:"
pp teams
puts "", "After sort:"
pp teams
teams.sort_by! { |team| [-team.won, team.lost, team.demerits, -team.style] }
# >> Before sort:
# >> [#<struct Team won=1, lost=2, demerits=4, style=3>,
# >> #<struct Team won=0, lost=4, demerits=2, style=2>,
# >> #<struct Team won=4, lost=1, demerits=2, style=3>,
# >> #<struct Team won=1, lost=4, demerits=1, style=4>,
# >> #<struct Team won=3, lost=1, demerits=1, style=4>,
# >> #<struct Team won=3, lost=4, demerits=1, style=2>,
# >> #<struct Team won=4, lost=0, demerits=4, style=0>,
# >> #<struct Team won=3, lost=4, demerits=1, style=2>,
# >> #<struct Team won=1, lost=4, demerits=1, style=2>,
# >> #<struct Team won=3, lost=0, demerits=1, style=1>,
# >> #<struct Team won=3, lost=4, demerits=3, style=4>,
# >> #<struct Team won=1, lost=4, demerits=0, style=0>,
# >> #<struct Team won=3, lost=4, demerits=2, style=0>,
# >> #<struct Team won=3, lost=0, demerits=3, style=0>,
# >> #<struct Team won=1, lost=2, demerits=0, style=1>,
# >> #<struct Team won=3, lost=0, demerits=1, style=0>,
# >> #<struct Team won=0, lost=4, demerits=1, style=4>,
# >> #<struct Team won=1, lost=4, demerits=3, style=0>,
# >> #<struct Team won=3, lost=3, demerits=2, style=3>,
# >> #<struct Team won=0, lost=4, demerits=4, style=4>]
# >>
# >> After sort:
# >> [#<struct Team won=4, lost=0, demerits=4, style=0>,
# >> #<struct Team won=4, lost=1, demerits=2, style=3>,
# >> #<struct Team won=3, lost=0, demerits=1, style=1>,
# >> #<struct Team won=3, lost=0, demerits=1, style=0>,
# >> #<struct Team won=3, lost=0, demerits=3, style=0>,
# >> #<struct Team won=3, lost=1, demerits=1, style=4>,
# >> #<struct Team won=3, lost=3, demerits=2, style=3>,
# >> #<struct Team won=3, lost=4, demerits=1, style=2>,
# >> #<struct Team won=3, lost=4, demerits=1, style=2>,
# >> #<struct Team won=3, lost=4, demerits=2, style=0>,
# >> #<struct Team won=3, lost=4, demerits=3, style=4>,
# >> #<struct Team won=1, lost=2, demerits=0, style=1>,
# >> #<struct Team won=1, lost=2, demerits=4, style=3>,
# >> #<struct Team won=1, lost=4, demerits=0, style=0>,
# >> #<struct Team won=1, lost=4, demerits=1, style=4>,
# >> #<struct Team won=1, lost=4, demerits=1, style=2>,
# >> #<struct Team won=1, lost=4, demerits=3, style=0>,
# >> #<struct Team won=0, lost=4, demerits=1, style=4>,
# >> #<struct Team won=0, lost=4, demerits=2, style=2>,
# >> #<struct Team won=0, lost=4, demerits=4, style=4>]