从activerecord对象创建数组

时间:2013-05-03 18:51:14

标签: ruby-on-rails ruby activerecord

当在rails控制台中时,以下代码打印以按照我的预期筛选geojson格式的坐标数组:

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,该怎么办?

2 个答案:

答案 0 :(得分:1)

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

map(&:my_geo)

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

答案 1 :(得分: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

如果你想要一个其他的数组,也可以使用map。 就像一个数组数组[[bg_id1,my_geo1],[bg_id2,my_geo2] ...]:

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