如何在现有属性栏上集成枚举

我想在现有日期使用enum。 表中的列status包含成千上万的记录。

问题是我的数据库中的记录大写,例如有效待审核正在等待审核已关闭等等

现在我定义一个枚举

enum status: [:active,:closed,:pending,:awaiting_review]

由于大写字母原因,它为何不起作用,而是下划线而不是空格。

当我执行Model.first.status时,它返回nil

iquw330860503 回答:如何在现有属性栏上集成枚举

您的问题是,您正在尝试执行Model.status,它不会返回任何内容,因为如果您想查看所有状态,status是实例方法,而不是类方法,做这个

Model.statuses

如果您想获取Model对象的状态,它将返回一个散列,这是一个示例

Model.first.status

默认情况下,enum需要一个整数列,因此,如果您这样定义枚举

enum status: [:active,:closed,:pending,:awaiting_review]

然后,表中的值将分别为0,1,2,3

因此,您可能希望将status列迁移到integer,然后编写rake任务以根据枚举值将现有值更新为新值!

在您的情况下,您说awaiting_review返回nil,因为您的现有值为awaiting review,即没有下划线。为了快速修复,请在模型中定义此方法

def status
  if self.read_attribute_before_type_cast(:status) == 'Awaiting Review'
    'Awaiting Review'
  else
    super
  end
end

要在每种情况下都使用上述方法,请改为这样定义枚举

enum status: { active: 'active',closed: 'closed',pending: 'pending',awaiting_review: 'Awaiting Review' }

根据表中保存的内容更改字符串哈希值

希望有帮助

本文链接:https://www.f2er.com/3067114.html

大家都在问