我正在使用 PostgreSQL + PostGIS 来处理空间数据,并且我还使用这个 gem activerecord-postgis-adapter来保持编写代码的轻松。我有这个模型
class Device < ActiveRecord::Base
attr_accessible :location
self.rgeo_factory_generator = RGeo::Geos.factory_generator
end
其中 :location 应该是 PostGIS POINT。要创建 Device 的新实例(例如在控制器的 create 方法中),我可以这样做:
params = { location: "POINT (-26 -43)" }
@device = Device.new(params)
其中“POINT (-26 -43)”是 WKT(众所周知的文本)格式中纬度 -26 和经度 -43 的点。我希望能够隐藏此实现细节并使其可以编写:
params = { latitude: -26, longitude: -43 }
@device = Device.new(params)
也许我可以通过覆盖我的设备类中的 after_initialize 方法来实现这一点。我还可以做些什么?
还有一件事..我还需要以 JSON 格式输出这个对象。现在我得到
{ "location": "POINT (-26 -43)" }
但是,我想要类似的东西
{ "location": { "latitude": -26, "longitude": -43 } }
对此的快速解决方案是覆盖 as_json 方法。还有其他建议吗?
谢谢。