Country Select

Currently, we see a text field for country_code when creating a gram.

Let's replace that with a select dropdown with actual country names.

1. Install Gem

Add to your Gemfile, and run bundle install in your terminal after that.

gem 'country_select'

2. Update new.html.erb

First, remove this line:

<%= f.text_field :country_code %>

In place of it, add this line:

<%= f.country_select :country_code, include_blank: true, priority_countries: ['SG', 'MY'] %>

Now, you have succcessfully replaced the text field for country_code with a select drop down.

When the form is submitted, it'll still be saving the 2-letters country code in the database.

3. Add a Helper

On our application, instead of showing country_code, we want to show the country name.

Let's add a helper in ApplicatioHelper to do this:

 module ApplicationHelper
  def country_name(country_code)
    country = ISO3166::Country[country_code]
    if country
      country.translations[I18n.locale.to_s]
    else
      country_code
    end
  end
end

This method uses the ISO3166::Country class from the country_select gem to find a country instance based on the country_code, and since I18n.locale.to_s returns en (our language) by default, this helper method will return the English name for the country code.

4. Add Helper to index.html.erb and show.html.erb.

In index.html.erb, let's use this method:

<div><%= country_name(gram.country_code) %></div>

In show.html.erb, let's use this method:

<div><%= country_name(@gram.country_code) %></div>

Restart the server and we are all done!