我有以下模型:
class Visitor < ApplicationRecord
enum timezone: {
'UTC': 'UTC',
'UTC-12': 'UTC-12',
'UTC-11': 'UTC-11',
'UTC-10': 'UTC-10',
'UTC-9': 'UTC-9',
'UTC-8': 'UTC-8',
'UTC-7': 'UTC-7',
'UTC-6': 'UTC-6',
'UTC-5': 'UTC-5',
'UTC-4': 'UTC-4',
'UTC-3': 'UTC-3',
'UTC-2': 'UTC-2',
'UTC-1': 'UTC-1',
'UTC+0': 'UTC+0',
'UTC+1': 'UTC+1',
'UTC+2': 'UTC+2',
'UTC+3': 'UTC+3',
'UTC+4': 'UTC+4',
'UTC+5': 'UTC+5',
'UTC+6': 'UTC+6',
'UTC+7': 'UTC+7',
'UTC+8': 'UTC+8',
'UTC+9': 'UTC+9',
'UTC+10': 'UTC+10',
'UTC+11': 'UTC+11',
'UTC+12': 'UTC+12',
'UTC+13': 'UTC+13',
'UTC+14': 'UTC+14'
}, _suffix: true
end
当我尝试使用包含-
或+
的任何时区创建新访问者时,它将不起作用:
visitor = Visitor.create(timezone: 'UTC-10')
visitor.errors
=> => #<ActiveModel::Errors:0x0000561b5de92338 @base=#<Visitor id: nil, ipv4: nil, ipv6: nil, timezone: "UTC-1", created_at: nil, updated_at: nil>, @messages={:timezone=>["is an invalid timezone"]}, @details={:timezone=>[{:error=>:inclusion, :value=>"UTC-10"}]}>
如果我发送一个无效的,它会引发一个错误(这是有道理的(:
ArgumentError ('UTC-100' is not a valid timezone)
有谁知道是否可以将枚举与-
或+
一起使用?
谢谢。
截至 Rails 文档:Declare an enum attribute where the values map to integers in the database
您正在尝试在枚举timezone
中映射字符串,您应该更改为:
class Visitor < ApplicationRecord
enum timezone: {
'UTC': 100, # duplicate of 'UTC+0'
'UTC-12': -12,
'UTC-11': -11,
'UTC-10': -10,
'UTC-9': -9,
'UTC-8': -8,
'UTC-7': -7,
'UTC-6': -6,
'UTC-5': -5,
'UTC-4': -4,
'UTC-3': -3,
'UTC-2': -2,
'UTC-1': -1,
'UTC+0': 0,
'UTC+1': 1,
'UTC+2': 2,
'UTC+3': 3,
'UTC+4': 4,
'UTC+5': 5,
'UTC+6': 6,
'UTC+7': 7,
'UTC+8': 8,
'UTC+9': 9,
'UTC+10': 10,
'UTC+11': 11,
'UTC+12': 12,
'UTC+13': 13,
'UTC+14': 14
}, _suffix: true
end
我建议你删除UTC
以支持UTC+0
(或相反(,因为它们意味着相同的时区。