我正在实现一些代码重构,出于我的目的,我已经确定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
列是字符串列而不是整数引起的。将其更改为整数,一切都将按预期工作。