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

Ruby on rails 如何在ActiveAdmin中正确配置Rails 4.1枚举,ruby-on-rails,enums,activeadmin,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

我有一个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\u private”、“privacy\u trusted”和“privacy\u public”

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

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

执行以下操作:

f.input :privacy_level, :as => :select, :collection =>  privacy_level.keys.to_a

根据杰克的回答,以下是对我有用的东西。假设您的ActiveRecord型号是
Tweets

f.input :privacy_level, as: :select, collection: Tweet.privacy_levels.keys
此处需要注意的关键事项:

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

要在ActiveAdmin的筛选器中使用枚举,请使用:

filter :level, as: :select, collection: Model.levels
假设一个名为
level


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

是的,这很有意义。我可以使用my_model.privacy_level=“privacy\u public”在控制台中设置隐私级别。我可以使用带有字符串的选择框来设置隐私级别,这是有道理的。谢谢欢迎你,很高兴能帮上忙,我已经把你的问题投了更高的票,这样你就可以明白了,请为我做同样的事,谢谢这是正确的答案。一开始我没有注意到复数(levels)::include_blank=>false将有助于添加,请记住在您的管理定义中允许参数:)它不适用于我,它抛出“'1'不是有效的(属性名称)”