Ruby on Rails 5, флаги страны

Просто для начала хочу извиниться за свою неопытность. Я все еще в процессе изучения RoR.

В настоящее время я пытаюсь попрактиковаться в создании полу-продвинутого веб-сайта, что является одним из больших шагов, но я добился большого прогресса.

Сейчас я сижу с проблемой, которую я потратил несколько дней, пытаясь ее решить. Я уверен, что это мелочь, которую я пропускаю, но я бьюсь головой о стену, пытаясь понять это.

Кажется, я не могу найти ни одного видео, поиска в Google или ТАКОЙ ветки, в котором хорошо об этом говорится.

- Флаги страны -

Я использую country_select и gem стран. Согласно странице драгоценных камней стран, https://github.com/hexorx/countries, он действительно может отображать смайлики с флагами стран. У него нет вики, но на первой странице единственная информация:

c = Country['MY']
c.emoji_flag # => ""

Я нашел очень немного ТАКИЕ статьи о показе смайликов с флагом страны. Rails 5 - Gem стран - флаги Я прочитал это несколько раз и попытался сделать свои собственные дополнения, в основном сталкиваясь с теми же проблемами, что и парень. Я получаю те же ошибки.

Одна небольшая вещь, которая не работает при тестировании, это:

irb(main):001:0> require "countries/global"
=> true

Мой тест возвращается как:

irb(main):001:0> require "countries/global"
=> false

Хотя мой гемфайл имеет:

gem 'countries', :require => 'countries/global'

Эта статья, Rails 5 - значки флагов с динамическим вводом страны, предназначена не для драгоценного камня стран, а для еще одного драгоценного камня. Там тоже не было ответа.

После того, как я отказался от отображения смайликов с флагами моих стран через жемчужину стран и ограниченную информацию / рекомендации, я нашел эту статью: Какие у меня есть варианты для включения флагов стран в приложение Rails 4?, Был только 1 ответ.

Это привело меня к загрузке zip-файла на https://www.flag-sprites.com/, распаковке его и перемещению изображения в мой конвейер / изображения актива и файлы css в конвейер / таблицу стилей актива.

Я конечно связал их, предварительно скомпилировал их и т. Д.

Затем я попытался выполнить тестовый код для отображения одного из изображений через спрайт, используя:

<span class="flag flag-us"></span>

Который отлично показывает выбранное изображение (флаг США)... Но! Для чего мне действительно нужны эти флаги страны, для профиля пользователя, как только он вошел в систему.

Мои пользователи уже должны выбрать страну, например, Соединенные Штаты Америки (US) через регистрацию. Он также сохраняется в базе данных, никаких проблем нет.

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

В настоящее время я использую:

            <ul>
                <li><span><p>Username:</p></span> <%= current_user.username %></li>
                <li><span><p>Country:</p></span> <span><%= current_user.country_name %></span></li>
                <br>
                <li><p>Bio:</p><p class="bio"><%= current_user.bio %></p></li>
            </ul>

для отображения пользовательской информации. Работает тэг username, он отображает имя пользователя, которое они выбрали при регистрации. Страна работает, с полным названием fx: Соединенные Штаты Америки, а не США. Био тоже работает. Пользователь может перейти редактировать его через страницу редактирования, и он изменится идеально.

Но теперь мне нужно знать, как сделать так, чтобы мой синтаксис выбирал соответствующий флаг в зависимости от страны, которую пользователь выбрал во время регистрации.

Я действительно надеюсь, что смогу получить некоторую помощь здесь на SO. Любая помощь будет очень ценной. Заранее спасибо.

Также извиняюсь за длинный текст стены, просто хотел попытаться показать некоторые исследования, которые я сделал. Я уверен, что чего-то здесь не хватает, но там очень мало информации об этом.

OBS! Использование Windows 8.1, Ruby on Rails 5.

2 ответа

Давайте использовать with_data_attrsвариант, и я использую значки флагов из https://github.com/lipis/flag-icon-css

в config/initializers/country_select.rb

CountrySelect::FORMATS[:with_data_attrs] = lambda do |country|
  [
    country.name,
    country.alpha2,
    {
      'data-country-code' => country.country_code,
      'data-alpha3' => country.alpha3,
      'data-icon' => "flag-icon flag-icon-#{country.alpha2.downcase}"
    }
  ]
end

я использую simple_form драгоценный камень для формы, и вот как я настраиваю

= f.country_select :full_name, { format: :with_data_attrs }, { class: 'form-control select2 selectpicker', 'data-live-search': 'true' }

И готово!:)

Я мог бы сделать что-то вроде этого:

<ul>
  <li><span><p>Username:</p></span> <%= current_user.username %></li>
  <li>
    <span><p>Country:</p></span>
    <span class="flag flag-<%= current_user.country_code %>"></span>
    <span><%= current_user.country_name %></span>
  </li>
  <br>
  <li><p>Bio:</p><p class="bio"><%= current_user.bio %></p></li>
</ul>

Вам нужно будет добавить метод к вашему User класс, который отображает country_name к одному из country_code значения, которые поддерживает flag-sprites. Пример:

class User < ApplicationRecord
  def country_code
    {
      "Czech Republic" => 'cz',
      "United States of America" => 'us'
      ...
    }[self.country_name]
  end
end

Новая попытка

Спасибо за быстрый ответ, @SeanHuber. Я пытался сделать несколько вещей с вашим предложением, но я все еще сталкиваюсь с некоторыми проблемами. Не похоже, что он принимает это как ссылку:

<span class="flag flag-<%= current_user.country_code %>"></span>

Похоже, желтый, я не уверен, если это имеет значение. Вы можете видеть это здесь

После добавления этого в мой файл просмотра:

<span><p>Country:</p></span> 
<span><%= current_user.country_name %></span> 
<span class="flag flag-<%= current_user.country_code %>"></span>

И это для моей модели пользователя:

def country_code
    {
      "Andorra" => 'ad',
      "Czech Republic" => 'cz',
      "Denmark" => 'dk',
      "United States of America" => 'us'
    }[self.country_name]
  end

Я получаю забавную ошибку на своей странице, которая отображает флаг Андорры. Пример флага Андорры. К моему подозрению, Андорра действительно находится на вершине списка кодов стран, начиная с "объявления", который можно увидеть по адресу: modemsite.com. Кажется, что он регистрируется на изображение спрайта, но не принимает / выбрать код страны, просто взять тот, что вверху.

Кроме того, добавив, что у меня есть это, в моей модели пользователя:

def country_name
    country = self.country
    ISO3166::Country[country]
  end

По умолчанию для выбора страны указывается только код страны (например, "США") в профиле пользователя, при добавлении метода country_name разрешается отображать "Соединенные Штаты Америки" вместо только кода "США". Я думал, что это может быть важной информацией.

Мне пришлось написать этот ответ как "ответ", так как раздел комментариев допускает только 300 символов, и я не могу добавить больше ссылок на исходное сообщение из-за своей репутации.

Другие вопросы по тегам