如何自定义选项以获取country_select gem的值的完整国家/地区名称?

时间:2017-11-21 13:12:02

标签: ruby-on-rails ruby

我使用了 country_select gem,它运行正常,现在我想将选项值设置为完整的国家/地区名称,与下拉列表中显示的内容相同,而不是contry代码。

例如:我如下:

<select id="order_ship_country" name="order[ship_country]">
    <option value="AU">Australia</option>
    <option value="CA">Canada</option>
    <option value="GB">United Kingdom</option>
    <option value="US">United States</option>
</select>

但我期待这样:

<select id="order_ship_country" name="order[ship_country]">
    <option value="Australia">Australia</option>
    <option value="Canada">Canada</option>
    <option value="United Kingdom">United Kingdom</option>
    <option value="United States">United States</option>
</select>

提前致谢

2 个答案:

答案 0 :(得分:0)

1 /创建一个初始化器

# config/initializers/country_select.rb

CountrySelect::FORMATS[:with_full_country_name] = lambda do |country|
  [
    country.name,
    country.alpha2,
    {
      'value' => country.name,
    }
  ]
end

2 /在您的视图中使用format

调用它
<%= country_select("user", "country", format: :with_full_country_name) %>

如文档中所述:https://github.com/stefanpenner/country_select#using-a-custom-formatter

答案 1 :(得分:-1)

如果您在User模型中使用它,如their doc所述,则创建名为country_name的实例方法,该方法将返回该用户的country name 。另请记住将country_code替换为您用于存储该国家/地区代码的User模型的属性。

class User < ActiveRecord::Base

  # Assuming country_select is used with User attribute `country_code`
  # This will attempt to translate the country name and use the default
  # (usually English) name if no translation is available
    def country_name
      country = ISO3166::Country[country_code]
      country.translations[I18n.locale.to_s] || country.name
    end
end

然后你使用select form helper

select("user", "country_code", User.all.collect {|u| [ u.country_name, u.country_code ] })

这应该生成

<select name="user[country_code]" id="user_country_code">
  <option value="AF">Africa</option>
  <option value="IT">Italy</option>
  <option value="FR">France</option>
</select>