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

