mysql - 如何使用 Ruby on Rails 将 MySQL 纬度/经度数据转换为 JSON

标签 mysql ruby-on-rails ruby json

预先感谢您就此问题提供的任何帮助:如何使用 Ruby on Rails 从我的 MySQL 表“位置”中的“纬度”和“经度”数据创建一个 JSON 对象?

我的最终目标是创建一个包含从 MySQL 数据库中提取的多个标记的 Google map 。我知道我可以通过 PHP 和 Google 教程 ( https://developers.google.com/maps/articles/phpsqlsearch_v3 ) 来做到这一点,但我的 PHP 并不强,我正在寻找一种更短的方法来通过 Rails 来做到这一点。

我试过这个其他教程(http://mokisystemsblog.blogspot.com/2013/04/add-markers-to-google-map-with-ruby-on.html),这是我的 Controller 代码:

    class MapallController < ApplicationController
      # GET /mapall
      # GET /mapall.xml
      # GET /mapall.js

      def index
        respond_to do |format|
          format.html do
            @locations = Location.find(:all)
          end
          format.xml  { render :xml => @locations }
          format.js do
            ne = params[:ne].split(',').collect{|e|e.to_f}  
            sw = params[:sw].split(',').collect{|e|e.to_f}
            @locations = Location.find(:all, :limit => 100, :bounds => [sw, ne])
            render :json => @locations.to_json
          end
        end
      end
    end

但是,当我访问 www.example.com/mapall.js 时,我收到错误代码。我希望此链接能为我提供来 self 的数据库的完整结果集。

再次感谢您在我学习此过程时的建议和耐心等待!

编辑 1 - 错误代码

下面是我访问 example.com/mapall、example.com/mapall.js 和 example.com/mapall.xml 时发生的情况的日志。当我访问 example.com/mapall 时,我希望 Google map 能够从 MySQL 数据库中呈现我的所有位置。除此之外,我希望在访问 mapall.js 时看到纬度/经度数据。从下面的日志中,我猜我得到 404 的原因是我的路由文件中没有到 mapall.js 的路由。是创建到路由文件的路由的解决方案吗?如果是,应该如何读取?

再次感谢您的帮助!

    Processing MapallController#index (for IP at DATE TIME) [GET]
    Rendering template within layouts/mapall
    Rendering mapall/index
    Completed in 779ms (View: 7, DB: 100) | 200 OK [http://example.com/mapall]

    Processing ApplicationController#index (for IP at DATE TIME) [GET]

    ActionController::RoutingError (No route matches "/mapall.js" with {:method=>:get}):
    /phusion_passenger ERROR INFO
    Rendering /home/example/web/current/public/404.html (404 Not Found)

    Processing ApplicationController#index (for IP at DATE TIME) [GET]

    ActionController::RoutingError (No route matches "/mapall.xml" with {:method=>:get}):
    /phusion_passenger ERROR INFO
    Rendering /home/example/web/current/public/404.html (404 Not Found)

编辑 2 - 新 Controller

感谢@kyllo 的反馈,我已经能够更新 Controller ,这样我就可以让我的所有位置数据显示在 http://example.com/mapall.js 上。 .只剩下一步:只显示昵称、纬度和经度字段。下面显示了所有数据。我应该如何更改它以仅显示昵称、纬度和经度字段?

    class MapallController < ApplicationController
    # GET /mapall
    # GET /mapall.xml
    # GET /mapall.js

    def index
    respond_to do |format|
@masterlocation = Masterlocation.find(:all)
    format.html do
    end
    format.xml  { render :xml => @masterlocation }
    format.js do
    @masterlocation = Masterlocation.find(:all)
    render :json => @masterlocation.to_json
    end
    end
    end
    end

最佳答案

我在这里看到了一些问题。

是的,您收到“无路由匹配”错误,因此您需要在 routes.rb 中有一条与此类似的路由,以便您可以访问 :format作为响应的参数:

match 'mapall.:format'

然后在你的 Controller 中,你有以下内容:

def index
    respond_to do |format|
      format.html do
        @locations = Location.find(:all)
      end
      format.xml  { render :xml => @locations }
      format.js do
        ne = params[:ne].split(',').collect{|e|e.to_f}  
        sw = params[:sw].split(',').collect{|e|e.to_f}
        @locations = Location.find(:all, :limit => 100, :bounds => [sw, ne])
        render :json => @locations.to_json
      end
    end
  end

你的 @locations = Location.find(:all)需要在 format.html do 之外 block ,否则 @locations 在你的 format.xml 中是未定义的 block ,你会得到一个错误。

format.js do将允许您的用户通过访问 http:/www.example.com/mapall.js 来访问 JSON API .如果你使用 format.json do然后他们可以通过 http:/www.example.com/mapall.json 访问它.选择权在您。

希望这能帮助您走上正轨!

关于mysql - 如何使用 Ruby on Rails 将 MySQL 纬度/经度数据转换为 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17265550/

相关文章:

mysql - 在 where 子句中使用相同的列

mysql - 导入MySQL函数时出现语法错误

ruby-on-rails - Rails路由和URI片段标识符

ruby-on-rails - Activeadmin 资源名称

javascript - 在表单中使用地理编码自动完成功能,这样用户就不需要输入他们所在的位置

php - 通过远程数据库连接 utf8 与本地连接返回的字符不同

php - 计算结果行

ruby-on-rails - Ruby 导入项目要求 Puma

ruby-on-rails - 如何使用 Active Record 使用 SQL

ruby - 如何使用 Postgres 在 DataMapper 中进行不区分大小写的排序?