Rails 5 - 国家 gem - 旗帜

Rails 5 - Countries gem - flags

我正在尝试弄清楚如何在我的 Rails 5 应用程序中使用国家 gem,以便我可以在我的视图中显示旗帜表情符号。

在我的 gem 文件中,我有:

gem 'countries', :require => 'countries/global'
gem 'country_select'

我有一个名为地址的模型。它有一个名为 :country

的属性

在我的 address.rb 中,我正在尝试复制 gem 说明。使用标志的说明说:

Country Code in Emoji

c = Country['MY']
Country.emoji_flag # => ""

这些说明对我来说没有任何意义。什么是 "c"?为什么第 2 行不使用 "c"?为什么在上面的示例中 "Country" 是一个 class 名称,它是一个属性?我需要做些什么来将地址 table 中的国家/地区属性转换为 gem 可以读取以确定显示哪个标志的内容吗?

None 这些问题似乎在任何地方都有答案。我认为这是假设每个人(除了我)似乎都可以凭直觉理解的事情的另一个例子。他们是我的障碍。

在我的地址模型中,我有:

  def country_name
    country = self.country
    ISO3166::Country[country]
  end

  def country_emoji
    country.emoji_flag
  end

第一种方法很好用。它显示正确的国家/地区名称。

第二种方法是我试图获得一个标志。在我的地址视图中,我有:

    <%=  Address.first.country_emoji %>

这行不通。它会产生一个错误:

undefined method `emoji_flag' for "AU":String

AU 是相关国家/地区的正确代码 - 因此它必须努力弄清楚它应该寻找哪个国家/地区。

如果我尝试将第二种方法(以便使用第一种方法)更改为:

def country_emoji
    country_name.emoji_flag
  end

我收到一条错误消息:

undefined method `emoji_flag' for #<ISO3166::Country:0x007fe87145d7e0>

谁能想出如何使用国家 gem 来展示国旗?

我看到 this post 这表明某处有一个示例应用程序来展示如何应用自述文件中的说明 - 尽管它似乎不再存在。

正如 gem docs 中所述,为了使用像

这样的语法
c = Country['US']

您应该首先将此添加到 Gemfile:

gem 'countries', :require => 'countries/global'

在控制台中测试:

irb(main):001:0> require "countries/global"
=> true
irb(main):002:0> country = Country.new('US')
=> #<Country:0x000000050dc4d8 @country_data_or_code="US" ... >
irb(main):003:0> country.emoji_flag
=> ""

(我真的不知道为什么相同的文档建议语法 Country.emoji_flag)。

要使用这些标志,我需要将 gem 更新到版本 2.5 并且国家-select gem 至少需要 v3