我在我的应用中遇到了一个小问题。我目前正在使用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]
在按距离排序时,是否有任何方法可以使用geokit对数据库进行分页?
AKA,没有调用完整的发现集?
答案 0 :(得分:1)
距离栏不再有效了:
"在当前版本的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
答案 1 :(得分:0)
我解决此问题的方法是使用find()
的:offset和:limit参数此外,geokit模型还有一个距离字段,:order =&gt;'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)