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 символов, и я не могу добавить больше ссылок на исходное сообщение из-за своей репутации.