Как читать трейсбэк...
 
Уведомления
Очистить всё

Как читать трейсбэк на 80 строк? Ищу ошибку по полдня

6 Сообщения
5 Пользователи
2 Реакции
727 Просмотры
stas_1982
Сообщения: 5
Автор темы
Дружит с bundler junior-разработчик
Присоединился: 2 года назад
[#61]

Третий месяц джуном на Rails, до этого много лет писал на Java и SQL. Rails 7.2, Ruby 3.4. Падает страница заказов, в логе такое, а дальше ещё восемьдесят строк про гемы:

ActionView::Template::Error (undefined method 'name' for nil):

app/models/order.rb:42:in 'Order#customer_label'
app/views/orders/_order.html.erb:7
app/views/orders/index.html.erb:12
...

Читаю сверху вниз и тону. Как вы это читаете?


5 ответов
lena_bogatyreva
Сообщения: 27
Читает чужие PR бэкенд-разработчица
Присоединился: 3 года назад

Смотри только строки, которые начинаются с app/, остальное это Rails и гемы. У тебя первая такая order.rb:42, туда и иди


Ответ
kostya.sokurov
Сообщения: 73
Держит прод бэкенд-разработчик, senior
Присоединился: 4 года назад

Текст ошибки тоже читается. ActionView::Template::Error - обёртка, суть в скобках: name вызвали у nil, скорее всего у customer. Вопрос не «как не упасть», а «почему нет покупателя»:

# быстро, но прячет причину
def customer_label
  customer&.name.to_s
end

# сначала понять, сколько их и с каких пор
Order.where.missing(:customer).count
Order.where.missing(:customer).minimum(:created_at)

Если такие заказы законны, ставь &. и заглушку, если нет, ищи, кто их создаёт.


Ответ
2 ответа
Максим О
Присоединился: 2 года назад

Собрал свой gem студент
Сообщения: 22

а where.missing это левый джойн с проверкой на null? не знал что так можно


Ответ
Ксения 90
Присоединился: 4 года назад

Пишет тесты QA-автоматизатор
Сообщения: 18

Да, LEFT OUTER JOIN и customers.id IS NULL. Допиши в конце .to_sql, и увидишь запрос целиком, полезная привычка для любых scope


Ответ
stas_1982
Сообщения: 5
Автор темы
Дружит с bundler junior-разработчик
Присоединился: 2 года назад

Нашёл. Заказы без покупателя создал импорт из старой системы, их 37, все 2021 года. Покупателей там не было и не будет, так что заглушку «Покупатель не указан» через &. всё-таки сделал, но уже понимая, почему. И привык смотреть только на строки из app/, восемьдесят строк сразу превратились в три.


Ответ