2013-05-03 65 views
0

当轨道控制台下面的代码打印到屏幕GeoJSON格式导出坐标数组作为我期待它:创建ActiveRecord的对象的数组

Bg. 
    select("bg_id, ST_AsGeoJSON(the_geom) as my_geo"). 
    where("ST_Contains(ST_MakeEnvelope(-xxx,xxx,-xxx,xxx, 4269), bg.the_geom)"). 
    map(&:my_geo) 

select部分然而不只是要求json。如果我也想要数组中的bg_id,该怎么办?

回答

1

你试图结束什么样的内部数据结构(即,你打算把bg_ids放在哪里)?例如。如果它只是一个哈希我想你可以改变

map(&:my_geo) 

map{|b| {b.id => b.my_geo} } 
+0

最后我想要的是与bg_id的作为键和GeoJSON的对象为值的哈希值。你在这里提供的是创建一个哈希数组。我使用'.reduce Hash.new,:merge'来完全按照我的意愿制作单个哈希。所以我想我的问题得到解答,除非你能想到更好的方法。谢谢! – 2013-05-03 19:22:48

+0

此外,虽然这个工程,我不知道我明白为什么。这看起来像是在数组的每个项目上调用称为“id”和“my_geo”的方法......是否正确? – 2013-05-03 19:51:26

+0

啊,在这种情况下,减少是要走的路。是的,这是正确的,它是调用方法。 '(&:my_geo)'是'{| obj |的缩写obj.my_geo}' – 2013-05-03 21:56:36

1

你只需要删除地图和活动记录的对象。

results = Bg.select("bg_id, ST_AsGeoJSON(the_geom) as my_geo"). 
where("ST_Contains(ST_MakeEnvelope(-xxx,xxx,-xxx,xxx, 4269), bg.the_geom)") 

然后:

results[0].bg_id 
results[0].my_geo 

或者使用地图,如果你想别的东西的数组。 就像一个数组的数组[bg_id1,my_geo1],[bg_id2,my_geo2] ...]:

results.map{|b| [b.bg_id,b.my_geo] } 
+0

这也似乎工作。谢谢。 – 2013-05-03 19:56:07