You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何判断ActiveRecord::Enum是用哈希还是数组初始化的?

获取Rails枚举的原始声明形式(哈希/数组)

在Rails里,直接通过Project.stages或Project.statuses只能拿到处理后的标准化哈希,确实没法直接判断当初是用哈希还是数组声明的。不过可以通过Active Record内部存储的枚举定义来获取原始的声明内容:

Rails会把每个枚举的原始配置存在模型的_enum_definitions属性里,这是一个哈希,键是枚举名称,值里包含了当初定义时用的原始数据。

具体用法

  1. 查看模型所有枚举的原始定义:
Project._enum_definitions

执行后会返回类似这样的结构:

{
  stage: {
    name: :stage,
    values: {Idea: "idea", Done: "done", "On hold": "on hold", Cancelled: "cancelled"},
    default: nil,
    scopes: true,
    # 其他内部属性...
  },
  status: {
    name: :status,
    values: [:draft, :published, :archived],
    default: nil,
    scopes: true,
    # 其他内部属性...
  }
}
  1. 获取单个枚举的原始声明:
  • 拿到stage枚举的原始哈希:
Project._enum_definitions[:stage][:values]
# 返回结果:{Idea: "idea", Done: "done", "On hold": "on hold", Cancelled: "cancelled"}
  • 拿到status枚举的原始数组:
Project._enum_definitions[:status][:values]
# 返回结果:[:draft, :published, :archived]

这个_enum_definitions是Active Record内部维护的结构,从Rails 5到最新的7.x版本都稳定可用,能直接获取到你当初定义枚举时用的原始哈希或数组。

内容的提问来源于stack exchange,提问作者Paul Bob

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 06:05:21