使用国家宝石https://github.com/hexorx/countries
方法:
ISO3166::Country.find_all_countries_by_continent('Europe')
我们还有:ISO3166::Country.countries
但是我们没有:ISO3166::Country.continents
我想有一个'Filter by continent'select
,它可以用I18n翻译。
是否有一种简单的方法可以获得所有可用的大陆?
据我所知(我可能是错的),我认为hexorx/countries没有给你这种可能性。
Ps:我已经为此创建了一个功能请求,如果它能使事情发生。
您可以使用
获取所有大陆ISO3166::Data.cache.map {|_,v| v['continent']}.uniq
#=> ["Asia", "North America", "Africa", "Europe", "South America", "Antarctica", "Australia"]
由于这个列表在可预见的将来不太可能改变,你可以把这些结果缓存到你自己。
ISO3166::CONTINENTS = ISO3166::Data.cache.map {|_,v| v['continent']}.uniq.sort
那么你可以在任何你需要的地方重用常量ISO3166::CONTINENTS
。
也就是说,i18n_data
宝石(用于翻译国家)似乎不提供大陆名称的翻译,所以这可能落在你的肩膀上。
一个Set
可能也会使这个更有效:(尽管获得大陆只是简单的Array
遍历和Hash
查找,它已经相当快了)
ISO3166::CONTINENTS = ISO3166::Data.cache.each_with_object(Set.new) do |(_,v),s|
s.add(v['continent'])
end.sort