2014-02-03 4 views
1

Я использовал следующий фрагмент кода без каких-либо проблем. функция 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 массив не пуст. Я не могу понять, почему внезапно я получаю эту ошибку. пожалуйста, кто-нибудь может помочь

+1

Это не о том, что массив «@products» пуст или нет - если он был пуст, итератор «@products» ничего не сделал. Проблема в том, что в одном из ваших продуктов либо отсутствует атрибут images, либо изображения [0] не возвращают хэш. Для целей отладки я бы начал с добавления «break if p.images.nil?» к вершине вашего итератора и оттуда. – FCStrike

+0

@FCStrike: Вы были правы. Спасибо за помощь. – nish

+0

Не проблема, я добавил свой комментарий в качестве ответа, если вы хотите принять его, чтобы этот вопрос можно было закрыть. – FCStrike

ответ

1

Это не о том, что массив «@products» пуст или нет - если он был пуст, итератор «@products» ничего не сделал. Проблема в том, что в одном из ваших продуктов либо отсутствует атрибут images, либо изображения [0] не возвращают хэш. Для целей отладки я бы начал с добавления «break if p.images.nil?» к вершине вашего итератора и оттуда.

Смежные вопросы