Rails: Номера телефонов - международный префикс

Я использую драгоценный камень страны и драгоценный камень, выбранный страной.

У меня в таблице телефонов есть атрибут с названием: 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 ответ

Решение

Мне кажется, что ваша проблема заключается в этой строке:

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
Другие вопросы по тегам