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

Rails 7 + PostgreSQL环境下如何获取模型定义的枚举值?

在Rails 7 + PostgreSQL中获取数据库枚举值的方法

因为你创建的是PostgreSQL原生枚举类型,而非Rails内置的枚举定义,所以Rails不会自动生成examen_cpf_enum这类快捷方法,需要通过以下方式获取枚举值:

方法一:直接查询数据库(最可靠)

在ExamenCpf模型中添加类方法,通过SQL查询PostgreSQL的枚举范围:

class ExamenCpf < ApplicationRecord
  def self.states
    connection.execute("SELECT unnest(enum_range(NULL::examen_cpf)) AS state").values.flatten
  end
end

调用ExamenCpf.states即可得到所有枚举值的数组:

["attente formation", "attente qcm", "attente evaluations", "terminé"]

方法二:利用Rails的数据库枚举缓存

如果你不想写原生SQL,可以借助Rails对数据库枚举的内部缓存来获取:

class ExamenCpf < ApplicationRecord
  def self.states
    enum_type = connection.enum_types.find { |enum| enum.name == 'examen_cpf' }
    enum_type&.values || []
  end
end

补充说明

你之前尝试的ExamenCpf.examen_cpf_enum这类方法,是针对Rails内置枚举(即通过enum :state => ["value1", "value2"]在模型中定义的枚举)才会生成的,而你用迁移创建的是数据库级别的原生枚举,两者机制不同,所以那些方法无法生效。

内容的提问来源于stack exchange,提问作者Denis Bolomier

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 07:55:18