如何在ActiveAdmin中正确配置Rails 4.1枚举

时间:2014-05-01 19:17:45

标签: ruby-on-rails enums activeadmin

我有一个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"。

然而,当我尝试编辑一个对象时,输入类型是一个带有向上和向下箭头的数字框,允许我输入任何整数,无论​​整数是否是有效的隐私级别(甚至是负值) )。

我希望看到的是一个下拉(选择)输入,其中包含我在模型中定义的三个枚举字符串值。

3 个答案:

答案 0 :(得分:51)

根据杰克的回答,这里有什么对我有用。假设您的ActiveRecord模型为Tweets

f.input :privacy_level, as: :select, collection: Tweet.privacy_levels.keys

这里需要注意的关键事项:

  • 您的ActiveRecord有一个有用的词典(在enum_name.pluralize中可用)枚举键值。
  • 使用字符串(并忽略基础整数表示)可以更容易地写入枚举值。

答案 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