Ruby on Rails 5,Country Flags

时间:2017-07-30 21:54:21

标签: rubygems ruby-on-rails-5 emoji countries

首先,我想为我的不熟练道歉。 我还在学习RoR。

我目前正在尝试建立一个半高级网站,这是一大步,但我已经取得了很大的进步。

我现在遇到了一个问题,我花了好几天试图解决。 我确定这是一个我忽视的小东西,但是我正在撞墙试图找出它。

我似乎无法找到任何视频,谷歌搜索或SO线程谈论它。

- 国旗 -

我正在使用country_select和countries gem。 根据国家宝石页面https://github.com/hexorx/countries,它确实可以显示国家标志表情符号。它没有维基,但在“首页”上,唯一的信息是:

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

我发现很少有关于展示国旗表情符号的SO文章。 Rails 5 - Countries gem - flags 我已经多次阅读过这篇文章并试图制作我自己的调整,基本上遇到的问题与那个人完全相同。我得到了同样的错误。

当我测试它时,一个不起作用的小事是:

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

我的测试确实回来了:

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

即使我的gemfile有:

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

这篇文章Rails 5 - Flag Icons with dynamic country input不是针对国家的宝石,而是针对另一个宝石。那里也没有答案。

在通过国家宝石和有限的信息/指导放弃显示我的国家标志表情符号之后,我发现了这篇文章:What are my options for incorporating country flags into a Rails 4 app?。 只有一个答案。

这导致我在https://www.flag-sprites.com/上下载zipfile,解压缩并将图像移动到我的资产管道/图像中,并将css文件移动到资产管道/样式表中。

我当然把它们联系起来,预编译等等。

然后我尝试测试运行代码,通过精灵显示其中一个图像,使用:

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

完美显示所选图像(美国国旗) 但!我真正需要这些国家标志的是用户个人资料,一旦他们登录。

我的用户必须通过注册选择一个国家/地区,例如美利坚合众国(美国)。它也会保存在数据库中,没有问题。

我只想根据用户在注册时选择的国家/地区,将用户国家的标记添加到他们的个人资料页面。

我目前使用:

            <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>

显示基于用户的信息。 用户名标签有效,它显示用户在注册时选择的用户名。 这个国家的名称是fx:美利坚合众国,而不是美国。 生物也有效。用户可以通过编辑页面对其进行编辑,它将完全改变。

但现在我需要知道,如何根据用户在注册过程中选择的国家/地区获取适当的标记。

我真的希望我能在这里得到一些帮助。 任何帮助都会很有帮助。 提前致谢。

同样为长篇文章道歉,只是想尝试展示我所做的一些研究。 我确定我在这里遗漏了一些东西,但那里的信息很少。

OBS!使用Windows 8.1,Ruby on Rails 5.

3 个答案:

答案 0 :(得分:0)

我可能会这样做:

<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映射到flag-sprites支持的country_code值之一。例如:

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

答案 1 :(得分:0)

- 新尝试 -

感谢您快速回复@SeanHuber。  我一直在尝试你的建议,但我仍然遇到一些问题。 它似乎不接受它作为链接:

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

看起来很黄,我不确定这是否重要。 You can see it here

将其添加到我的视图文件后:

<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

我在显示安道尔旗帜的页面上收到了有趣的错误。 Andorra Flag example 令我怀疑的是,安道尔确实位于国家代码列表的首位,从“广告”开始,可以在以下网址看到:modemsite.com 看起来它正在注册精灵图像,但它不接受/选择国家代码,只需将顶部的那个。

在我的用户模型中添加我的这个:

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

默认情况下,country_select仅在用户个人资料中显示国家/地区代码(如“美国”),添加方法country_name,允许其显示“美国”,而不仅仅是代码“US”。 我认为这可能是重要的信息。

我必须将此回复写为“回答”,因为评论部分只允许300个字符,因为我的声誉,我无法添加更多链接到我的原始帖子。

答案 2 :(得分:0)

让我们使用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' }

就完成了! :)