以下代码将使用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_geo
更改为variable = result.my_geo
然后尝试使用该变量,则会收到错误消息,指出该变量不存在。
有什么想法吗?
答案 0 :(得分:3)
您是否在块中定义了变量?然后它将无法在外面访问。 首先在块外部定义变量。
答案 1 :(得分:2)
或者改为使用map
:
variable = Zcta.
select("ST_AsGeoJSON(ST_simplify(geom,500)) as my_geo").
where(geoid10: '90210').map do |result|
result.my_geo
end
答案 2 :(得分:2)
您正在寻找map
而不是each
each
将遍历Enumerable中的每个项目并为其执行块,返回nil
。在您的示例中,puts
将对象打印到控制台,但不将其存储在任何位置。
map
将为枚举的每个元素执行块,并返回一个 new 枚举,其中包含在每个元素上运行给定块的结果。< / p>
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