【问题标题】:Can someone point out to me why ActiveRecord::Enum is not working as expected in this simple example?有人可以向我指出为什么 ActiveRecord::Enum 在这个简单的示例中没有按预期工作吗?
【发布时间】: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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多