问题描述
我的 rails 应用中有一个国家下拉列表(使用国家宝石)
像这样在下拉列表中列出所有国家。
all_countries = ISO3166::Country.all.map{ |c| ["#{c.alpha3} (+#{c.country_code})",c.country_code] }
我想让美国国家作为 dp 的第一选择。为此,我将删除该国家/地区并在如下所示的第一个位置重新添加相同的内容,以便将该国家/地区显示为第一个选项(它工作正常。但是还有比这更好的方法吗?)
all_countries.delete(["美国 (+1)","1"])
all_countries.unshift(["美国 (+1)","1"])
解决方法
您可以使用 sort_by
并检查元素是否等于 "USA"
,如果是,则先执行:
ISO3166::Country
.all
.map(&:data)
.pluck('alpha3','country_code')
.sort_by { |alpha3,_| alpha3 == "USA" ? 0 : 1 }
.map { |alpha3,country_code| ["#{alpha3} (+#{country_code})",country_code] }
# [["USA (+1)","1"],# ["JAM (+1)",# ["HTI (+509)","509"],# ...
或者你可以在 alpha3
等于 "USA"
时分割所有国家,然后将结果展平(我认为一个更好):
ISO3166::Country
.all
.map(&:data)
.pluck('alpha3','country_code')
.partition { |alpha3,_| alpha3 == "USA" }
.flatten(1)
.map { |alpha3,country_code] }
# ["USA (+1)",["TJK (+992)","992"],["JAM (+1)",...]
,
试试这个:
all_countries.insert(0,all_countries.delete_at(all_countries.index("USA (+1)","1")))