预先感谢您就此问题提供的任何帮助:如何使用 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/