ruby-on-rails 轨道简单形式(_F):如何显示国家的长名称

ecbunoof  于 2023-01-03  发布在  Ruby
关注(0)|答案(2)|浏览(157)

我使用simple_form gem选择国家/地区:

= simple_form_for @shop, :url => { :action => "create" }, :html => {:id => 'new_shop' } do |f|
  = f.simple_fields_for :address, :html => {:multipart => true} do |o|
    = o.input :country, :label => "Country"

但是国家的名称以短格式保存在数据库中(如RUFRAU等)。
我想知道,我怎样才能在视图中显示这个国家的完整、长的名称?谢谢!

kq4fsx7k

kq4fsx7k1#

实际上是一个好主意,保存在数据库中的国家代码(而不是长名称),因为I18n.有了代码,你可以稍后得到的名称如下:

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

勾选:选择国家:从countries gem获取国家名称

klr1opcd

klr1opcd2#

这对我来说真的很有效(我偶尔会有nil"")。
application_helper.rb中:

def country_name(country_code)
  unless country_code.nil? || country_code == ""
    country = ISO3166::Country[country_code]
    country.translations[I18n.locale.to_s] || country.common_name || country.iso_short_name
  end
end

在视图中

<%= country_name(@user.country_code) %>

它基于国家选择文档。

用法示例

arr = ["AU", "US", nil, ""]
arr.map{ |country_code| country_name(country_code) }
# => ["Australia", "United States", nil, nil]

相关问题