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

如何在Rails中通过ActiveRecord enum获取枚举属性的可用值列表?

获取Rails ActiveRecord Enum的可用属性列表

针对你定义的Fruit模型,ActiveRecord的enum其实已经帮你准备好了现成的方法来获取枚举的可用值,不用自己写复杂逻辑:

先看你的模型代码:

class Fruit < ApplicationRecord
  enum fruit_name: { banana: 'banana', apple: 'apple' }
end

当你定义完这个enum后,Rails会自动给Fruit类添加一个名为fruit_names的类方法(就是枚举字段名加s)。这个方法返回包含所有枚举键值对的哈希:

Fruit.fruit_names
# => { banana: 'banana', apple: 'apple' }

获取值的列表(符合你的需求)

如果你想要得到像['banana', 'apple']这样的值列表,直接调用哈希的values方法即可:

Fruit.fruit_names.values
# => ['banana', 'apple']

额外:获取键的列表

如果之后你需要符号形式的键列表,用keys方法就行:

Fruit.fruit_names.keys
# => [:banana, :apple]

封装成你期望的方法(可选)

如果你想做成你提到的allowed_attributes_for这种形式,也可以在模型里自己封装一个方法(还能加个参数校验避免出错):

class Fruit < ApplicationRecord
  enum fruit_name: { banana: 'banana', apple: 'apple' }

  def self.allowed_attributes_for(enum_field)
    # 校验传入的字段是否为枚举字段
    raise ArgumentError, "#{enum_field} is not an enum field" unless defined_enums.key?(enum_field.to_s)
    send("#{enum_field}s").values
  end
end

这样就能像你期望的那样调用了:

Fruit.allowed_attributes_for(:fruit_name)
# => ['banana', 'apple']

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:00:57