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
相关产品推荐
相关产品推荐

