Третий месяц джуном на 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
...
Читаю сверху вниз и тону. Как вы это читаете?
Смотри только строки, которые начинаются с app/, остальное это Rails и гемы. У тебя первая такая order.rb:42, туда и иди
Текст ошибки тоже читается. 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)
Если такие заказы законны, ставь &. и заглушку, если нет, ищи, кто их создаёт.
Нашёл. Заказы без покупателя создал импорт из старой системы, их 37, все 2021 года. Покупателей там не было и не будет, так что заглушку «Покупатель не указан» через &. всё-таки сделал, но уже понимая, почему. И привык смотреть только на строки из app/, восемьдесят строк сразу превратились в три.