首先,我想为我的不熟练道歉。 我还在学习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.
答案 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' }
就完成了! :)