【发布时间】:2021-08-17 13:47:02
【问题描述】:
我遇到了类似this 的问题。并非所有区域都返回:
ActiveSupport::TimeZone.all.sort_by {|t| t.name}.map { |tz|
#symbol = tz.tzinfo.identifier.gsub(/[^_a-zA-Z0-9]/, '_').squeeze('_').upcase!
tz.to_s #> (GMT+00:00) Edinburgh for example
}
我需要使用 .to_s 来获取 UTC (GMT+00:00)。以上,London 不见了,我假设其他人。这个效果很好:
ActiveSupport::TimeZone::MAPPING.sort_by {|k,v| k}.map { |k,v|
#symbol = k.gsub(/[^_a-zA-Z0-9]/, '_').squeeze('_').upcase!
k #> London London is included with this method
}
我无法使用此方法,因为我不知道如何在(GMT+00:00) London 中获取(GMT+00:00)
错误又回来了吗?如何获取第一个示例的所有区域显示?
编辑。
我正在使用GraphQL-ruby。我创建了一个枚举来返回时区列表:
# Taken from: https://gist.github.com/pedrocarmona/f41d25e631c1144045971c319f1c9e17
class Types::TimeZoneEnumType < Types::BaseEnum
ActiveSupport::TimeZone.all.sort_by {|t| t.name}.map { |tz|
symbol = tz.tzinfo.identifier.gsub(/[^_a-zA-Z0-9]/, '_').squeeze('_').upcase
value("TZ_#{symbol}", tz.to_s)
}
end
然后在query_type.rb里面
[..]
field :time_zones, Types::TimeZoneEnumType, null: false
[..]
接下来,在 graphiql 中,我进行查询:
query timeZones{
__type(name: "TimeZoneEnum") {
enumValues {
name
description
}
}
}
返回类似的东西,除了伦敦:
[
[..]
{
"name": "TZ_AMERICA_LA_PAZ",
"description": "(GMT-04:00) La Paz"
},
{
"name": "TZ_AMERICA_LIMA",
"description": "(GMT-05:00) Lima"
},
{
"name": "TZ_EUROPE_LISBON",
"description": "(GMT+00:00) Lisbon"
},
{
"name": "TZ_EUROPE_LJUBLJANA",
"description": "(GMT+01:00) Ljubljana"
},
{
"name": "TZ_EUROPE_MADRID",
"description": "(GMT+01:00) Madrid"
},
[..]
]
Ljubljana 之后我应该看到“伦敦”,但它不在那里。
【问题讨论】:
-
你运行的是什么版本的 Rails?当我在 Rails 6.1 中运行
ActiveSupport::TimeZone.all.map(&:to_s)时,伦敦包括在内。您按名称字段排序,但映射到包含时区的to_s,所以我想知道您是否在输出中错过了伦敦? -
运行我得到的代码
(GMT+00:00) London也包括在内 -
这很奇怪。好的,我再看看。
-
它在控制台中显示但不渲染。我将在编辑中准确解释我在做什么。
标签: ruby-on-rails ruby graphql-ruby