Ruby on rails 如何在ActiveAdmin中正确配置Rails 4.1枚举
我有一个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
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)
- 使用字符串(并忽略底层整数表示)可以更容易地写入枚举值
filter :level, as: :select, collection: Model.levels
假设一个名为level
这将确保在查询中实际输入整数值,而不是键名。是的,这很有意义。我可以使用my_model.privacy_level=“privacy\u public”在控制台中设置隐私级别。我可以使用带有字符串的选择框来设置隐私级别,这是有道理的。谢谢欢迎你,很高兴能帮上忙,我已经把你的问题投了更高的票,这样你就可以明白了,请为我做同样的事,谢谢这是正确的答案。一开始我没有注意到复数(levels)::include_blank=>false将有助于添加,请记住在您的管理定义中允许参数:)它不适用于我,它抛出“'1'不是有效的(属性名称)”