Faits: A. Par contrat du 30 mars 1981, la Ville de Genève a remis à bail aux époux X._ et Y._ un appartement de quatre pièces dans un immeuble, à Genève. Le loyer annuel, sans les charges, s'élevait en dernier lieu à 8'088 fr. Selon un rapport d'entretien du 1er mars 2004 établi par la Gérance Municipale Immobilière, Y._ vit en Espagne depuis 2002 et son époux habite l'appartement avec leur fille, W._ et l'enfant de celle-ci; X._ se prépare à rejoindre son épouse en Espagne et accepte de continuer à payer le loyer; W._ est invitée à s'inscrire d'urgence auprès de la gérance. Du 30 mars 2004 au 30 mars 2006, X._ a été au bénéfice d'une autorisation d'absence délivrée par l'Office cantonal de la population. Par courrier du 3 mai 2005, le Centre d'action sociale et de la santé des Pâquis a demandé à la Ville de Genève de transférer le bail au nom de W._, en précisant que X._ logeait dans l'appartement lors de ses visites en Suisse. Par lettre du 30 mai 2005, la Ville de Genève a refusé le transfert du bail au motif que W._ ne s'était pas inscrite auprès de ses services et qu'un ordre de priorité, tenant compte de la date d'inscription, devait être respecté dans l'attribution des logements. Un formulaire d'inscription était joint au courrier. Le lendemain, la Ville de Genève a résilié le bail pour son terme contractuel du 30 septembre 2005. Dans un pli du 20 juin 2005, elle a précisé que le congé était motivé par le départ des locataires à l'étranger et l'absence d'inscription de leur fille pour l'attribution d'un appartement. B. X._ et Y._ ont contesté la validité de la résiliation. Ils concluaient à la constatation de la nullité du congé, subsidiairement à l'annulation de la résiliation et, plus subsidiairement, à une prolongation du bail de quatre ans. Ils faisaient valoir que le congé n'avait pas été signé par le Conseil administratif de la Ville de Genève et que X._ vivait encore régulièrement avec sa fille dans l'appartement au moment de la résiliation. La Commission de conciliation a constaté la nullité du congé. La Ville de Genève a porté la cause devant le Tribunal des baux et loyers du canton de Genève, qui a statué sans procéder à des enquêtes ni entendre les parties. Par jugement du 23 mars 2007, le tribunal a déclaré le congé valable et refusé d'accorder une prolongation de bail aux locataires. Statuant le 10 décembre 2007, la Chambre d'appel en matière de baux et loyers du canton de Genève a déclaré irrecevable l'appel formé par X._ et Y._, faute d'un intérêt juridique et actuel des locataires «à faire constater leur droit de rester dans l'appartement litigieux». C. X._ et Y._ interjettent un recours en matière civile. Ils demandent au Tribunal fédéral d'annuler l'arrêt du 10 décembre 2007 puis, principalement, de renvoyer la cause à la cour cantonale pour instruction et jugement au fond. A titre subsidiaire, ils concluent à la constatation de la nullité du congé ou à son annulation ou encore à la prolongation du bail jusqu'au 30 septembre 2009. Par ordonnance du 25 février 2008, le Président de la cour de céans a accordé au recours l'effet suspensif réclamé par les locataires. La Ville de Genève propose que le recours soit déclaré irrecevable, voire rejeté.