def account_totals
@user.accounts.map(&:amount).compact.sum
end
Если учетных записей нет, @user.accounts
будет пустой коллекцией. Пустые коллекции по-прежнему отвечают на все те же методы, что и заполненные, поэтому вызовы map
и sum
будут работать - они просто будут пустыми.
nil
s можно удалить из коллекции с помощью .compact
Если честно, ваш вопрос немного запутан; вы ссылаетесь на account.percent
, которого нет в вашем фрагменте кода; и если коллекция accounts
пуста, то +=
НЕ будет работать. Поскольку вы получаете ошибку принуждения, мы должны предположить, что этот код работает, а account.amount
равен nil
. Если это имеет смысл, рассмотрите значение по умолчанию от amount
до 0
в модели Account. В противном случае используйте compact
для фильтрации nil
s из массивов, как я уже говорил выше. Если вы ДЕЛАЕТЕ по умолчанию от amount
до 0
, вы можете использовать фрагмент в комментарии @AbM для максимальной ясности и минимализма.