我正在实现一些代码重构,为了我的目的,我已经确定ActiveRecord :: Enum将是一个完美的契合。对于那些没有使用或听说过ActiveRecord :: Enum的人来说,这里是文档链接 ActiveRecord::Enum
以下是从我遇到问题的文档中获取的代码。
class Conversation < ActiveRecord::Base
enum status: [ :active, :archived ]
end
# conversation.update! status: 0
conversation.active!
conversation.active? # => true
conversation.status # => "active"
# conversation.update! status: 1
conversation.archived!
conversation.archived? # => true
conversation.status # => "archived"
# conversation.status = 1
conversation.status = "archived"
conversation.status = nil
conversation.status.nil? # => true
conversation.status # => nil
以下是我尝试模仿此行为的示例代码:
class ReverificationTracer < ActiveRecord::Base
enum status: [ :verified, :unverified ]
end
rev = ReverificationTracker.create
rev.verified! ==> true
rev.unverified? ==> false
rev.status ==> nil
rev.unverified! ==> true
rev.unverified? ==> false
rev.status ==> nil
当我检查rev
变量时,我确实看到状态已转移到'0'
rev
id: 1,
account_id: nil,
status: "0",
created_at: Wed, 24 Feb 2016 16:24:55 UTC +00:00,
updated_at: Wed, 24 Feb 2016 16:25:21 UTC +00:00>
归档时,我看到状态增量为1。
为什么这不符合我对文档的期望?
答案 0 :(得分:2)
问题是由status
列为字符串列而非整数引起的。将其更改为整数,一切都将按预期工作。