2013-05-03 66 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