как ограничить количество локаций с гемом rubygeocoder? - PullRequest
4 голосов
/ 23 июля 2011

У меня есть объект местоположения, поэтому 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 ]

6 голосов
/ 27 июля 2011

Проблема в том, что rubygeocoder возвращает ActiveRecord::Relation в случае успеха, но пустое Array при ошибке.А Ruby's Array не отвечает на limit, поэтому я советую использовать first(number) вместо limit(number), который будет работать с обоими результатами.эта проблема заключается в использовании take(5), который будет работать как на Mongoid::Criteria объектах, так и на Ruby Array s.

2 голосов
/ 02 августа 2011

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

location = location.nearbys
location = location[0..4]
2 голосов
/ 23 июля 2011

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

0 голосов
/ 27 июля 2011

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

has_many locations, :limit => 5

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

0 голосов
/ 26 июля 2011

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

Подробнее о Объект # try

...