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つの列挙された文字列値を持つドロップダウン(選択)入力です。
ジャックの答えを基にして、私のために働いたものがここにあります。 ActiveRecordモデルがTweets
であるとしましょう:
f.input :privacy_level, as: :select, collection: Tweet.privacy_levels.keys
ここで注意すべき重要な点:
ActiveAdminのフィルターで列挙型を使用するには、次を使用します。
filter :level, as: :select, collection: Model.levels
enum
という名前のlevel
属性を想定
これにより、キー名ではなく整数値がクエリに実際に入力されるようになります。
これを行う:
f.input :privacy_level, :as => :select, :collection => privacy_level.keys.to_a