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_geoしてvariable = result.my_geo後で変数を使用しようとすると、変数が存在しないというエラーが表示されます。

何かご意見は?

4

3 に答える 3

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

eachEnumerable 内の各アイテムを反復処理し、そのブロックを実行して、 を返し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 に答える