我有一个Rails 4.1应用程序,其中我使用枚举来表示对象的隐私级别。
在我的架构中:
t.integer "privacy_level", default: 0
在我的模特中:
enum privacy_level: { privacy_private: 0, privacy_trusted: 1, privacy_public: 2 }
在我的ActiveAdmin注册文件中:
index do
column :privacy_level
default_actions
end
form do |f|
f.inputs "Edit My Model" do
f.input :privacy_level
end
f.actions
end
在ActiveAdmin索引页面上,它运行良好。每个对象的隐私级别显示为" privacy_private"," privacy_trusted"和" privacy_public"。
然而,当我尝试编辑一个对象时,输入类型是一个带有向上和向下箭头的数字框,允许我输入任何整数,无论整数是否是有效的隐私级别(甚至是负值) )。
我希望看到的是一个下拉(选择)输入,其中包含我在模型中定义的三个枚举字符串值。
答案 0 :(得分:51)
根据杰克的回答,这里有什么对我有用。假设您的ActiveRecord模型为Tweets
:
f.input :privacy_level, as: :select, collection: Tweet.privacy_levels.keys
这里需要注意的关键事项:
答案 1 :(得分:27)
要在ActiveAdmin的过滤器中使用枚举,请使用:
filter :level, as: :select, collection: Model.levels
假设enum
属性名为level
这将确保实际将整数值放在查询中,而不是键名。
答案 2 :(得分:7)
这样做:
f.input :privacy_level, :as => :select, :collection => privacy_level.keys.to_a