Используя рельсы драгоценный камень геокит сортировки по расстоянию и нумерации страниц? - PullRequest
4 голосов
/ 25 сентября 2010

Я столкнулся с небольшой проблемой в моем приложении. В настоящее время я использую geokit для поиска объектов вблизи заданного местоположения, и я использую sort_by_distance_from в найденном наборе.

См. Ниже:

@find = Item.find(:all, :origin =>[self.geocode.lat.to_f,self.geocode.lng.to_f], :within=>50, :include=>[:programs], :conditions=>["programs.name = ?", self.name])
  @find.sort_by_distance_from([self.geocode.lat.to_f,self.geocode.lng.to_f]

Есть ли способ с геокитом разбивать на страницы БД при сортировке по расстоянию?

АКА, не вызывать полный найденный набор?

Ответы [ 2 ]

1 голос
/ 20 октября 2015

Столбец расстояния больше не работает:

"В текущей версии geokit-rails невозможно добавить предложение where с помощью столбца расстояния. Я пробовал много разных способов сделать это, но он не работал".

Он действует одинаково для предложений where и order.

Можно было бы построить запрос, подобный этому:

scoped  = Location.geo_scope(:origin => @somewhere)
scoped  = scoped.where('distance <= 5')
results = scoped.all

Это сейчас невозможно, это нужно сделать за один шаг, подобный следующему:

scoped = Location.within(5, :origin => @somewhere)
results = scoped.all

github.com / geokit / geokit-рельсы

0 голосов
/ 15 октября 2010

Мой подход для решения этой проблемы заключается в использовании параметров: offset и: limit для find ()

, также есть поле расстояния для моделей геокитов, : order => 'distance asc'

напр.

page = 0 unless params[:page]
items_per_page = 20
offset = page * items_per_page
@find = Item.find(:all, :origin =>[self.geocode.lat.to_f,self.geocode.lng.to_f], :within=>50, :include=>[:programs], :conditions=>["programs.name = ?", self.name], :order => 'distance asc', :limit => items_per_page, :offset => page)
...