ruby-on-rails - rails : Dynamic Select with Active Record

标签 ruby-on-rails activerecord

我需要创建一个动态 SQL 选择语句,以从名为 Metros 的表中获取城市、州组合,并且距离一组传入的 GPS 坐标的距离最短。请注意,传入的 GPS 坐标集是将从列表中提取的变量。为了计算距离,我需要能够传入纬度和经度,并使用 haversine 公式,计算当前行与表 Metros 中所有 291 个城市之间的距离,然后选择最小的城市,州。

在 Rails 中,我遇到的问题是如何使用 Metros 表正确创建 select 语句,以允许传入可变 GPS 坐标,同时还使用 Active Record 而不是传统的 SQL。

目前,这是我取得的进展:

    Metros.select(
        "major_city
        , major_state
        ," haversine(row[latitude], row[longitude], lat2, long2)" as 'distance'")
           .group("major_city,major_state").limit(1).order('distance')

row[latitude], row[longitude] 是传入的变量纬度和经度(当前行我正在比较 Metros 中所有 291 个城市/州的 GPS 坐标> 表格,需要选择 Haversine 函数输出的距离最小的表格)。至于lat2、long2,需要引用Metros表中的纬度和经度列。

在构建此查询时,我不知道如何输入 Haversine 函数以及如何使用 Active Record 从数据库中提取这些记录并进行计算。

有没有更好的方法来完成我想做的事情?

最佳答案

你应该将 haversine 实现为 SQL 函数,然后像这样在 ActiveRecord 中调用:

Metros.select("major_city, major_state, haversine(?, ?, lat, long) as 'distance'", lat, long).
  group("major_city,major_state").
  limit(1).
  order('distance')

关于ruby-on-rails - rails : Dynamic Select with Active Record,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25975018/

相关文章:

mysql - 在 Windows 7 64 位上使用 mysql2 安装 ruby​​ 在 rails s 上返回错误

ruby-on-rails - 如何将自定义错误添加到用户错误集合中?

ruby-on-rails - 在没有 Rails 的情况下运行 ActiveRecord 迁移

mysql - 如何使用 Rails 4 对单行中的值求和?

mysql - 为什么 ActiveRecord 会截断此时间戳精度?

ruby-on-rails - 在任何来源中都找不到 rake-10.0.4 (Bundler::GemNotFound)

ruby-on-rails - 找不到 cap 命令

mysql - 如何在 MySQL 中以 Ruby 哈希存储多封电子邮件?

mysql - Ruby on Rails/Active Record/MYSQL - 按字符串属性分组和排序

ruby-on-rails - 新的 Rails 应用程序 Postgres 不会安装