如何从 Rails 的国家/地区下拉列表中将美国列为首选?

问题描述

我的 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")))

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...