我有一个位置对象,所以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。
答案 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
通过这种方式,您只需从数据库中检索所需的数据,而且不会遇到rescue
或try
的麻烦。