0

我目前正在将一个PHP应用程序移植到Rails。我需要从给定的经度和纬度计算最近的场地。Rails和ActiveRecord - 经纬度最近点

在我的PHP应用程序,我有这个MySQL查询(俱乐部都场馆我说的):

SELECT cl.*, c.id, c.slug AS city_slug, 
(3959 * acos(cos(radians(:lat)) * cos(radians(cl.lat)) * cos(radians(cl.lng) - radians(:lng)) + sin(radians(:lat)) * sin(radians(cl.lat)))) 
AS distance 
FROM club cl, city c 
WHERE cl.published = 1 
AND c.id = cl.city_id 
AND cl.id <> :club_id 
AND cl.deleted = 0 
ORDER BY distance 
LIMIT 0,10 

正如你所看到的,计算正在在数据库层量身定做的,我会喜欢它保持那样。

我如何通过Rails,ActiveRecord和PostgreSQL实现这一目标?

+0

最简单的是Activerecord的find_by_sql方法,但是相关模型上的任何迁移都不会与原始sql作为参数保持同步。你能承担这个模型吗? –

回答

1

一种可能做到这一点是使用Geokit宝石:

https://github.com/geokit/geokit-rails

他们提供了一个范围,从坐标找到最接近的纪录:

在文档
Club.closest(origin: [@lat,@long]) 

你可以找到另一个例子和选项。