1

这段代码:

@countries.map { |l| [l.country_name, l.latitude, l.longitude, l.capital] }

返回

[["country_name_1", latitude, longitude, capital],["country_name_2", latitude, longitude, capital],...]

但我需要转换为 JSON;像这样的东西:

{
   "country_name_1" : [latitude, longitude, "capital"],
   "country_name_2" : [latitude, longitude, "capital"],
   .
   .
   .
}
4

1 回答 1

4

这应该有效:

Hash[@countries.map { |l| [l.country_name, [l.latitude, l.longitude, l.capital]] }]

Rails 还提供index_by

@countries.index_by(&:country_name)
# => {
#      "country_name_1" => #<Country latitude:..., longitude:...>,
#      "country_name_2" => #<Country latitude:..., longitude:...>,
#    }

对象可能比散列更方便。

关于 JSON

Rails 内置了对 JSON 的支持:http: //guides.rubyonrails.org/layouts_and_rendering.html#rendering-json

您也可以to_json手动调用:

hash = Hash[@countries.map { |l| [l.country_name, [l.latitude, l.longitude, l.capital]] }]
hash.to_json

或者使用JSON Builder gem。

于 2013-06-03T08:26:02.980 回答