有人可以向我指出为什么在这个简单示例中 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。

为什么这没有像我从文档中期望的那样工作?

该问题是由您的status列是字符串列而不是整数引起的。将其更改为整数,一切都将按预期工作。

最新更新