我使用Ruby geocoder gem(1.1.6)并看到我不理解的行为。以下测试失败证明了这一点。
it "calculates distance consistently" do
one = FactoryGirl.create(:point, latitude: 1.0, longitude: 1.0)
two = FactoryGirl.create(:point, latitude: 2.0, longitude: 2.0)
expect(
one.distance_to(two)
).to eq(
Geocoder::Calculations.distance_between(
[one.latitude, one.longitude], [two.latitude, two.longitude]
)
)
end
这导致:
Failure/Error: expect(
expected: 97.69535411821234
got: 157.22543203807288
(compared using ==)
我看到object.distance_to(other)
应该是一个"位置感知查询",但在我的测试日志中,我只看到了创建的SQL插入,没有SELECT
到得到距离。 (我正在使用PostgreSQL。)
我的期望在某种程度上是不正确的吗?
答案 0 :(得分:0)
一点点代码探究澄清了这一点。我需要在调用{units: :km}
时添加Geocoder::Calculations.distance_between
,因为这就是模型正在使用的内容。
我认为这是:
point.method(:distance_to).source_location
units
选项