如何用ruby geocoder gem限制位置数量?

时间:2011-07-23 17:13:43

标签: ruby-on-rails ruby rubygems geocoding

我有一个位置对象,所以location.nearbys获取位置附近的所有位置。但我想将结果限制为5.我正在使用location.nearbys.limit(5),但问题是当没有附近位置时我收到错误消息。它说限制不能用于空数组[]。 那么,解决方案是什么。我可以用。

location = location.nearbys
location = location.nearbys.limit(5) unless location.empty?

我有更好的方法吗?我正在使用mongoid,rails 3.0.7,ruby 1.9.2。

5 个答案:

答案 0 :(得分:6)

问题是如果成功,rubygeocoder会返回ActiveRecord::Relation,但如果失败则返回空Array。并且Ruby的数组不响应limit,所以我的提示是使用first(number)而不是limit(number),这将适用于这两个结果。


发现,这个问题的最佳解决方案是使用take(5),这对Mongoid::Criteria个对象和Ruby Array都有效。

答案 1 :(得分:2)

不确定是否更好 - 但也可以将它包装在救援区中,这也可以让你在结果为空时做其他事情的选择

答案 2 :(得分:2)

这应该可行,即使你得到一个空数组。

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

答案 3 :(得分:0)

编写它的一种方法是location.nearbys.try(:limit, 5)

更多关于Object#try

答案 4 :(得分:0)

我相信location.nearbys是一个集合。您可以按如下方式对集合本身施加限制:

has_many locations, :limit => 5

通过这种方式,您只需从数据库中检索所需的数据,而且不会遇到rescuetry的麻烦。

相关问题