首先,我想为我的不专业道歉。 我还在学习 RoR 的过程中。
我目前正在尝试练习建立一个半高级网站,这是一大步,但我取得了很大的进展。
我目前正面临一个问题,我花了几天时间试图解决。 我确定这是我忽略的一件小事,但我正在用头撞墙试图弄清楚。
我似乎找不到任何视频、谷歌搜索或 SO 线程很好地谈论它。
--国旗 --
我正在使用country_select和国家宝石。 根据国家宝石的页面,https://github.com/hexorx/countries,它确实可以显示国旗表情符号。它没有维基,但在"首页"上,唯一的信息是:
c = Country['MY']
c.emoji_flag # => "🇺🇸"
我发现了很少的关于显示国旗表情符号的SO文章。 轨道 5 - 国家宝石 - 旗帜我已经多次阅读了这篇文章,并试图做出自己的判断,基本上遇到了与该家伙完全相同的问题。我得到同样的错误。
当我测试运行它时,一件小事不起作用,那就是:
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个答案。
这导致我在 https://www.flag-sprites.com/上下载zip文件,解压缩它并将图像移动到我的资产管道/图像中,将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:美利坚合众国,而不是美国。 生物也有效。用户可以通过编辑页面对其进行编辑,它会完美地更改。
但是现在我需要知道,如何根据用户在注册期间选择的国家/地区使我的语法获取适当的标志。
我真的希望我能在这里得到一些帮助。 任何帮助都会得到很多赞赏。 提前谢谢。
也为墙的长篇道歉,只是想尝试展示我所做的一些研究。 我确定我在这里遗漏了一些东西,但关于这方面的信息很少。
哗啦啦!使用 Windows 8.1、Ruby on Rails 5。
我可能会做这样的事情:
<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
值之一。 例:
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_select仅在用户配置文件上显示国家/地区代码(如"US"),添加方法country_name,允许它显示"美国",而不仅仅是代码"US"。 我认为这可能是重要的信息。
我不得不把这个回复写成"答案",因为评论部分只允许 300 个字符,而且由于我的声誉,我无法向我的原始帖子添加更多链接。
让我们使用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' }
大功告成!:)