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

问题描述 投票:30回答:3

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

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

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

ruby-on-rails enums activeadmin
3个回答
51
投票

建立杰克的答案,这对我有用。假设你的ActiveRecord模型是Tweets

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

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

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

27
投票

要在ActiveAdmin的过滤器中使用枚举,请使用:

filter :level, as: :select, collection: Model.levels

假设一个名为enumlevel属性

这将确保实际将整数值放在查询中,而不是键名。


7
投票

做这个:

f.input :privacy_level, :as => :select, :collection =>  privacy_level.keys.to_a
© www.soinside.com 2019 - 2024. All rights reserved.