У меня есть объект Search
с методом listings
, который возвращает массив хэшей, если есть результаты поиска, в противном случае он возвращает пустой массив.В случае, если есть какой-либо пустой массив, мне нужно пропустить некоторый код и перейти прямо к странице шоу.Я пробовал object.nil?
object.empty?
object.present?
все с одинаковым результатом .... объект, который должен быть нулем, обрабатывается как ненулевой.
Код контроллера:
def show
@search = Search.find(params[:id])
@results = @search.listings
if @results.last.present?
if @results.last[0] == "p" || @results.last[0] == "s" || @results.last[0] == "d"
p "@results.pop is either p, s, or d"
@sort_column = @results.pop
@grade = @sort_column.gsub(/[^0-9,.]/, "") unless @results.last[0] == "d"
end
end
end
показать результаты действия в
undefined method `[]' for nil:NilClass
Extracted source (around line #21):
19 p "@results.pop is either p, s, or d"
20 @sort_column = @results.pop
21 @grade = @sort_column.gsub(/[^0-9,.]/, "") unless @results.last[0] == "d"
22 end
23 end
24 end
, но интерфейс сервера проверяет, что @ results.last равен nil:
>> @results
=> []
>> @results.last
=> nil
>> @results.last.present?
=> false
>> @results.last[0]
NoMethodError: undefined method `[]' for nil:NilClass
from /Users/tomb/Projects/schoolsparrow/app/controllers/searches_controller.rb:21:in `show'
>>
Я не знаю, каклогика проходит мимо results.last.present?
, когда results.last
равно nil
.