Как ограничить количество локаций с гемом 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 объекты и рубин Arrays.

Это должно работать, даже если вы получите пустой массив.

location = location.nearbys
location = location[0..4]

Не уверен, что лучше - но, в качестве альтернативы, вы можете обернуть его в спасательный блок, который также даст вам возможность делать что-то еще, когда результат пуст

Один из способов написать это будет location.nearbys.try(:limit, 5)

Подробнее об объекте # попробуйте

Я считаю, что location.nearbys - это коллекция. Вы можете наложить ограничение на саму коллекцию следующим образом:

has_many locations, :limit => 5

Таким образом, вы получаете только необходимые данные из БД, а также нет хлопот rescue или же try,

Другие вопросы по тегам