私は小さなプロジェクトを行っています
- 国リスト
- 国の略語リスト (UK、US など)。
- ダイヤルコード。
ユーザーが +44 を入力すると、国と国の略語を取得する必要があります
これを実装する最良の方法は何ですか?3 つの異なるハッシュを作成しますか? またはネストされたハッシュを使用しますか?
車輪を再発明する前に、countries gemのような既存のソリューションを確認する必要があります。
c.number #=> "840"
c.alpha2 #=> "US"
c.alpha3 #=> "USA"
c.country_code #=> "1"
c.national_destination_code_lengths #=> 3
c.national_number_lengths #=> 10
c.international_prefix #=> "011"
c.national_prefix #=> "1"
任意のフィールドに基づいてデータを検索できるようにする必要があるために質問していると仮定すると、次のようなものを使用してレコードを 3 つの異なるハッシュにマップできます。各ハッシュは関連するフィールドによってインデックス付けされます。
country_codes, names, dial_codes = [
{ country_code: "GB", name: "United Kingdom", dial_code: "44" },
{ country_code: "AU", name: "Australia", dial_code: "61" },
{ country_code: "IT", name: "Italy", dial_code: "39" }
].inject([{}, {}, {}]) do |(cc, n, dc), record|
[
cc.merge(record[:country_code] => record),
n.merge(record[:name] => record),
dc.merge(record[:dial_code] => record)
]
end
p country_codes["AU"]
# => { country_code: "AU", name: "Australia", dial_code: "61" }
p dial_codes["44"]
# => { country_code: "GB", name: "United Kingdom", dial_code: "44" }
また、英国の正式な国コードは UK ではなく GB であることに注意してください。紛らわしいですね。