Я использовал следующий фрагмент кода без каких-либо проблем. функция querytags
возвращает набор «продуктов». geturl
Функция проверяет, имеет ли продукт изображение, связанное с ним. Все продукты с изображением выталкиваются productsProxy
массивRoR: неопределенный метод `[] 'для nil: NilClass
@query = params[:tag]
@products = queryTags(@query)
@productsProxy = Array.new
if @products != nil
@products.each do |p|
tempProduct = ProductProxy.new(p)
if tempProduct.getUrl(tempProduct.images[0]['id'], 'small', tempProduct.images[0]['file'])
@productsProxy.push(tempProduct)
end
end
else
@productProxy = []
end
Затем я попытался добавить еще один параметр в URL и изменили функцию querytags
соответственно.
@query = params[:tag]
@taxon = params[:taxon]
@products = queryTags(@query, @taxon)
@productsProxy = Array.new
if @products != nil
@products.each do |p|
tempProduct = ProductProxy.new(p)
if tempProduct.getUrl(tempProduct.images[0]['id'], 'small', tempProduct.images[0]['file']) #now showing error
@productsProxy.push(tempProduct)
end
end
else
@productProxy = []
end
Но я сказал получение undefined method
[]»для ноль: NilClass` на линии:
if tempProduct.getUrl(tempProduct.images[0]['id'], 'small', tempProduct.images[0]['file'])
Я проверил с помощью отладчика, что @products
массив не пуст. Я не могу понять, почему внезапно я получаю эту ошибку. пожалуйста, кто-нибудь может помочь
Это не о том, что массив «@products» пуст или нет - если он был пуст, итератор «@products» ничего не сделал. Проблема в том, что в одном из ваших продуктов либо отсутствует атрибут images, либо изображения [0] не возвращают хэш. Для целей отладки я бы начал с добавления «break if p.images.nil?» к вершине вашего итератора и оттуда. – FCStrike
@FCStrike: Вы были правы. Спасибо за помощь. – nish
Не проблема, я добавил свой комментарий в качестве ответа, если вы хотите принять его, чтобы этот вопрос можно было закрыть. – FCStrike