Проблема в том, что product
равно nil
:
неопределенный метод 'page_url' для nil: NilClass ". Решение:
(он не имеет ничего общего с page_url
возможно , возвращающего nil
.)
Убедитесь, что product
не может быть nil
: но будьте осторожны, что это может быть более глубокой проблемой. В любом случае, "исправить" эту проблему легко.
Рассмотрите возможность использования ограничения коллекции (например, Enumerable # reject ):
@all_products.reject(&:nil?).each do {
...
}
Выше используется Symbol # to_proc "Рельсовая магия" , но с такой же легкостью он мог бы быть {|x| x.nil?}
как ограничение. Недостатком является то, что это не практичноиспользовать это для условия «нет URL» для каждого продукта, хотя Enumerable # partition может помочь с этим: используйте правильный инструмент для задания.
Другое решение состоит в расширении условной проверкисамо по себе:
if product && product.page_url("en_US")
# yay
else
# uhm
end
Характер короткого замыкания &&
гарантирует, что page_url
вызывается только при истинном значении (исключаяnil
).
Я также взял на себя смелость предположить, что page_url
не может вернуть false
, поскольку я нахожу, что это делает цель более ясной.
Удачное кодирование.