Sean Johnson made three saves for NYCFC, which lost 1-0 to the Crew in the March 1 season opener for one of four 1-0 defeats this season.
This time, the league-leading Columbus couldn't generate offense in having a four-game winning streak stopped.
The Crew's Fanendo Adi had a goal disallowed in the 91st minute because of an offside call they did not dispute.
The goal by Ring was the first allowed by the Crew in 430 minutes and was just the second conceded this season; the first in the run of play.
NYCFC took advantage of a turnover by Aboubacar Keita. He casually tried a cross-field pass in his own third. Heber intercepted it and dribbled to the left side of the box, drawing the attention of two Crew and goalkeeper Andrew Tarbell.
Heber slid a pass across to Ring, who slotted the ball from 8 yards for his first goal of the season.
NYCFC was without one of their top weapons, Maxi Moralez, because of a calf injury. Likewise, for the Crew with midfielder Lucas Zelarayan (ankle) missing a second straight match.
New York City did everything it could to gum up the Crew attack by not allowing them to play their possession game.
In order to do that, NYCFC tenaciously defended and set the tone with six fouls in the first 14 minutes. By halftime, the total was 12 for New York City while Columbus had two.
That helped New York City FC hold a 55.8-44.2 percent advantage in possession. Yet, the Crew had the lone shot on target through 45 minutes.
The final foul total favored New York City 19-8.
Columbus plays at FC Cincinnati on Saturday. NYCFC hosts the Chicago Fire on Saturday.