Rails:电话号码 - 国际前缀

时间:2015-10-17 03:17:12

标签: ruby-on-rails country-codes countries

我正在使用国家宝石和国家选择宝石。

我的手机表中有一个名为:country_code的属性。我要求用新手机形式的用户选择他们的国家:

<%= f.input :country_code,  label: false, wrapper: :vertical_input_group  do %>
  <span class="input-group-addon">Country</span>
  <%= country_select("phone", "country_code", {priority_countries["AU", "GB", "NZ"], selected: "AU" }, class: "form-control" ) %>
<% end %>

我想带那个国家并获得国际前缀。

我有一个手机型号,我有:

def landline_number
   [international_code, area_code, phone_number].join('   ')
end

def international_code
   self.country_code = ISO3166::Country[country_code]
   country_code.translations[I18n.locale.to_s] || country_code.international_prefix
end

当我尝试:

<%= @phone.landline_number %>

它打印国家/地区名称而不是国际前缀。

如何让它打印数字而不是国家/地区名称?

1 个答案:

答案 0 :(得分:1)

在我看来,你的问题是这一行:

country_code.translations[I18n.locale.to_s] || country_code.international_prefix

根据文档示例

# Get a specific translation
c.translation('de') #=> 'Vereinigte Staaten von Amerika'
c.translations['fr'] #=> "États-Unis"

ISO3166::Country.translations             # {"DE"=>"Germany",...}
ISO3166::Country.translations('DE')       # {"DE"=>"Deutschland",...}

你实际上是先提取国家名称,因为它找到了代码

country_code.international_prefix
由于||,

未执行你有条件。如果你要删除||左边的代码它应该工作。换句话说,尝试离开你的方法:

def international_code
    self.country_code = ISO3166::Country[country_code]
    country_code.international_prefix
end