1

首先,我想为我的不专业道歉。我仍在学习 RoR 的过程中。

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

我目前正面临一个问题,我花了几天时间试图解决这个问题。我确定这是我忽略的小事,但我正用头撞墙试图弄清楚。

我似乎找不到任何视频、谷歌搜索或 SO 线程很好地谈论它。

-- 国旗 --

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

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

我发现了一些关于显示国旗表情符号的 SO 文章。 Rails 5 - Country 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不是针对国家 gem 的,而是针对另一个 gem。那里也没有答案。

在通过国家宝石和有限的信息/指导放弃显示我的国旗表情符号之后,我发现了这篇文章:我有哪些选择可以将国旗合并到 Rails 4 应用程序中?. 只有1个答案。

这导致我在https://www.flag-sprites.com/上下载 zipfile ,解压缩并将图像移动到我的资产管道/图像中,并将 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>

显示基于用户的信息。用户名标签有效,它显示用户在注册期间选择的用户名。国家工作,全名fx:美利坚合众国,而不是US。生物也有效。用户可以通过编辑页面进行编辑,它会完美改变。

但现在我需要知道,如何根据用户在注册期间选择的国家/地区使我的语法获取适当的标志。

我真的希望我能在这里得到一些帮助。任何帮助将不胜感激。提前致谢。

也为墙上的长文本道歉,只是想尝试展示我所做的一些研究。我确定我在这里遗漏了一些东西,但是关于此的信息很少。

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

4

3 回答 3

0

--新尝试--

感谢您的快速回复,@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

我在显示安道尔国旗的页面上收到了一个有趣的错误。 安道尔国旗示例 我怀疑,安道尔确实在国家代码列表的顶部,以“ad”开头,可以在:modemsite.com 看到它似乎正在注册精灵图像,但它不接受/选择一个国家代码,只需选择顶部的那个。

还补充说我有这个,在我的用户模型中:

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

默认情况下,country_select 仅在用户配置文件中显示国家代码(如“US”),添加方法 country_name,允许它显示“美国”,而不仅仅是代码“美国”。我认为这可能是重要的信息。

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

于 2017-07-31T14:02:15.493 回答
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_namecountry_codeflag-sprites 支持的值之一。例子:

class User < ApplicationRecord
  def country_code
    {
      "Czech Republic" => 'cz',
      "United States of America" => 'us'
      ...
    }[self.country_name]
  end
end
于 2017-07-31T02:00:10.737 回答
0

让我们使用选项,我使用来自https://github.com/lipis/flag-icon-csswith_data_attrs的标志图标

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_formgem 作为表单,这就是我设置的方式

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

它完成了!:)

于 2019-10-19T15:07:15.770 回答