Проблема заключается в том, что вы не знаете ли User.where(username: user).first
возвращает объект вы ожидаете или нет. Если не этот запрос вернет nil
, значит, в следующей строке вы вызываете метод verified
на nil
, вызывая ошибку, которую вы видите.
Вы всегда должны защищать себя от ситуаций, когда вы не уверены, что ваш метод может вернуться nil
. В вашем примере это было легко заметить, но в архитектуре немного сложнее вы могли бы пропустить ноль вокруг нескольких классов, прежде чем вызывать метод на нем, что делает debbuging чрезвычайно сложнее.
Всегда проверяйте перед выполнением вызова любого метода:
def showVerifiedIcon(name)
'<i class="fa fa-check-circle verified-icon fa-lg"></i>' if user(name)
end
private
def user(name)
User.find_by_username(name)
end
If User.find_by_username
возвращает nil
, то ваш, если заявление не будет оказывать вам HTML элемент
'User.find_by (...)' более кратким, чем 'User.where (...). first'. – tadman
ОК отредактируйте это в моем ответе, и я соглашусь –
Мне лично не нравится 'try', и он выглядит как запах кода каждый раз, когда я нахожу его в базе кода. Причина в том, что, когда вы используете try, у вас нет уверенности, если у вас есть объект на нет. Он нарушает «Скажи, не спрашивай принцип». – Barbared