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

Pop*_*ash 31 enums ruby-on-rails activeadmin

我有一个Rails 4.1应用程序,其中我使用枚举来表示对象的隐私级别.

在我的架构中:

t.integer "privacy_level", default: 0
Run Code Online (Sandbox Code Playgroud)

在我的模型中:

enum privacy_level: { privacy_private: 0, privacy_trusted: 1, privacy_public: 2 }
Run Code Online (Sandbox Code Playgroud)

在我的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
Run Code Online (Sandbox Code Playgroud)

在ActiveAdmin索引页面上,它运行良好.每个对象的隐私级别显示为"privacy_private","privacy_trusted"和"privacy_public".

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

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

Ale*_*yMK 52

建立杰克的答案,这对我有用.说你的ActiveRecord模型是Tweets:

f.input :privacy_level, as: :select, collection: Tweet.privacy_levels.keys
Run Code Online (Sandbox Code Playgroud)

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

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

  • :include_blank => false会有所帮助 (12认同)
  • 它对我不起作用,它会抛出"'1'不是有效的(属性名称)" (6认同)

Chr*_*sen 27

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

filter :level, as: :select, collection: Model.levels
Run Code Online (Sandbox Code Playgroud)

假设一个enum名为的属性level

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


jim*_*gic 7

做这个:

f.input :privacy_level, :as => :select, :collection =>  privacy_level.keys.to_a
Run Code Online (Sandbox Code Playgroud)

  • 你欢迎,很高兴能提供帮助,我已经提出了你的问题所以你可以得到重点,请为我做同样的事,谢谢 (2认同)