【发布时间】:2016-02-24 16:27:47
【问题描述】:
我正在实施一些代码重构,出于我的目的,我确定 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。
为什么这不像我在文档中所期望的那样工作?
【问题讨论】:
-
我的猜测是:您的状态列是整数,而不是字符串。
-
您是否尝试将字符串(值集为
'archived')与符号数组进行比较?这里可能存在类型不匹配,导致验证错误 -
就是这样。我不得不将数据库列更改为整数而不是字符串。感谢您指出这一点。
标签: ruby-on-rails ruby activerecord enums