web-dev-qa-db-ja.com

Rails 4.1ActiveAdminの列挙型を適切に構成する方法

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つの列挙された文字列値を持つドロップダウン(選択)入力です。

31
Pop-A-Stash

ジャックの答えを基にして、私のために働いたものがここにあります。 ActiveRecordモデルがTweetsであるとしましょう:

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

ここで注意すべき重要な点:

  • activeRecordには、値への列挙型キーの便利な辞書(enum_name.pluralizeで入手可能)があります。
  • 文字列を使用すると(そして基になる整数表現を無視して)、列挙値への書き込みが簡単になります。
51
AlexeyMK

ActiveAdminのフィルターで列挙型を使用するには、次を使用します。

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

enumという名前のlevel属性を想定

これにより、キー名ではなく整数値がクエリに実際に入力されるようになります。

27
ChrHansen

これを行う:

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