2

以下代码将使用 ST_AsGeoJSON postgis 函数查询我的数据库,并在 rails 控制台中将 json 对象打印到屏幕上。

Zcta.
  select("ST_AsGeoJSON(ST_simplify(geom,500)) as my_geo").
  where(geoid10: '90210').each do |result|
    puts result.my_geo
  end

如果我想将该内容放入一个变量(或数组,或就此而言的散列)中怎么办?如果我更改puts result.my_geovariable = result.my_geo然后稍后尝试使用该变量,我会收到一条错误消息,指出该变量不存在。

有什么想法吗?

4

3 回答 3

3

你在块中定义你的变量吗?那么外面就无法访问了。首先在块外定义变量。

于 2013-04-18T20:26:06.620 回答
2

map改用:

variable = Zcta.
  select("ST_AsGeoJSON(ST_simplify(geom,500)) as my_geo").
  where(geoid10: '90210').map do |result|
    result.my_geo
  end
于 2013-04-18T20:31:22.003 回答
2

你正在寻找map而不是each

each将遍历 Enumerable 中的每个项目并为其执行块,返回nil. 在您的示例中,将puts对象打印到控制台,但不会将其存储在任何地方。

map, 另一方面,将为可枚举的每个元素执行块,并向您返回一个的可枚举,其中包含在每个元素上运行给定块的结果。

x = [1,2,3].map { |elem| elem + 1 }
puts x
[2,3,4]

在您的情况下,您可以执行以下操作:

result = Zcta.select("ST_AsGeoJSON(ST_simplify(geom,500)) as my_geo")
  .where(geoid10: '90210')
  .map(&:my_geo)

您的查询结果现在将作为 Enumerable 存储在变量中result

于 2013-04-18T22:00:43.930 回答