Существует гораздо более простое решение с использованием arithmeti c:
def score
(upvotes || 0) - (downvotes || 0)
end
Но обычно, если вы получаете nils, это признак того, что у вас должны быть значения по умолчанию для столбцов или следует использовать COALESCE в базе данных запрос, в который вы загружаете данные.
User.select(
'*',
'COALESCE(users.upvotes, 0) - COALESCE(users.downvotes, 0) AS score'
)