Как ограничить количество локаций с гемом rubygeocoder?
У меня есть объект местоположения, поэтому location.nearbys получает все местоположения рядом с местоположением. Но я хочу ограничить результаты до 5. То, что я делаю с location.nearbys.limit(5), но проблема в том, что рядом нет места, я получаю сообщение об ошибке. Это говорит, что ограничение не может использоваться на пустом массиве []. Итак, в чем решение. Я могу использовать.
location = location.nearbys
location = location.nearbys.limit(5) unless location.empty?
У меня есть лучшие способы сделать это? Я использую mongoid, рельсы 3.0.7, ruby 1.9.2 .
5 ответов
Проблема в том, что rubygeocoder возвращает ActiveRecord::Relation
если успешно, но пусто Array
на провал. И Ruby's Array не отвечает на limit
так что мой совет использовать first(number)
вместо limit(number)
, который будет работать с обоими результатами.
Выяснилось, что лучшим решением этой проблемы является использование take(5)
который будет работать как на Mongoid::Criteria
объекты и рубин Array
s.
Это должно работать, даже если вы получите пустой массив.
location = location.nearbys
location = location[0..4]
Не уверен, что лучше - но, в качестве альтернативы, вы можете обернуть его в спасательный блок, который также даст вам возможность делать что-то еще, когда результат пуст
Один из способов написать это будет location.nearbys.try(:limit, 5)
Подробнее об объекте # попробуйте
Я считаю, что location.nearbys - это коллекция. Вы можете наложить ограничение на саму коллекцию следующим образом:
has_many locations, :limit => 5
Таким образом, вы получаете только необходимые данные из БД, а также нет хлопот rescue
или же try
,