No pude hacerlo correr con el operador ternario:

@s = (s.id == id) ? s : nil

Suponiendo que el segundo de 3 elementos es el que pasa la prueba, se evalúa la expresión para cada uno de los objetos
• FALSE
• TRUE
• FALSE

El último es false, por lo tanto @s es sobreescrito, y devuelve nil.