注: このバージョンは、Ecto 1.1 と Ecto 2.0 の両方をサポートするように更新されました。詳細については、「インストール」を参照してください。
ExAdmin は、Elixir および Phoenix Framework 用の自動管理パッケージであり、Ruby on Rails 用の ActiveAdmin のポート/インスピレーションです。
ライブデモをチェックしてください。ソース コードは ExAdmin Demo にあります。
多対多の関係、ネストされた属性、認証の例については、この追加のライブ デモを確認してください。
詳細については、ドキュメントと Wiki を参照してください。
ExAdmin は、Phoenix Framework を使用して、コードをほとんどまたはまったく含まずに CRUD 管理ツールを作成するアプリケーションのアドオンです。いくつかの混合タスクを実行して、管理する Ecto モデルを定義すると、追加のコードなしで機能するものが得られます。
ExAdmin を使用する前に、Phoenix プロジェクトと Ecto モデルを作成する必要があります。
ex_admin を deps に追加します。
mix.exs
defp deps do ... {:ex_admin, "~> 0.8"}, ... 終わり
mix.exs
defp deps do ... {:ex_admin, github: "smpallen99/ex_admin"}, ... 終わり
いくつかの管理構成と管理モジュールを構成ファイルに追加します。
config/config.exs
設定:ex_admin、 リポジトリ: MyProject.Repo、 モジュール: MyProject、# MyProject.Web for phoenix >= 1.3.0-rc モジュール: [MyProject.ExAdmin.Dashboard, 】
依存関係を取得してコンパイルする
mix do deps.get, deps.compile
ExAdmin を構成します。
mix admin.install
管理ルートを追加する
web/router.ex
defmodule MyProject.Router を実行します MyProject.Web を使用、:router ExAdmin.Router を使用する ... スコープ「/」、MyProject は実行します... 終わり # ExAdmin ルートを /admin に設定します スコープ "/admin"、ExAdmin dopipe_through :browseradmin_routes() 終わり
ページング構成を追加する
lib/my_project/repo.ex
defmodule MyProject.Repo は Ecto.Repo を使用します、otp_app: :my_projectuse Scrivener、page_size: 10 終わり
brunch-config.js ファイルを編集し、インストーラーがこのファイルに追加した指示に従います。これには、2 つのブロックをコピーし、既存のブロックを置き換える必要があります。
iex -S mix phoenix.server
でアプリケーションを起動します。
http://localhost:4000/admin にアクセスしてください
デフォルトのダッシュボード ページが表示されるはずです。
モデルを追加するには、 admin.gen.resource
mix タスクを使用します。
mix admin.gen.resource MyModel
新しいモジュールを構成ファイルに追加します。
config/config.exs
設定:ex_admin、 リポジトリ: MyProject.Repo、 モジュール: MyProject、 モジュール: [MyProject.ExAdmin.Dashboard,MyProject.ExAdmin.MyModel, 】
フェニックスサーバーを再度起動し、 http://localhost:4000/admin/my_model
を参照します。
MyModel
をリスト/追加/編集/削除できるようになりました。
ExAdmin はスキーマの変更セットを使用します。デフォルトでは、スキーマのchangeset
関数を呼び出しますが、更新と作成に使用する変更セットを個別に構成することもできます。
カスタム変更セット:
defmodule TestExAdmin.ExAdmin.Simple do ExAdmin.Register を使用する register_resource TestExAdmin.Simple doupdate_changeset :changeset_updatecreate_changeset :changeset_create 終わる
私たちは多対多をサポートしており、Ecto が提供する多くの関係を持っています。多対多の関係には Cast_assoc を使用し、多対多の関係には put_assoc を使用することをお勧めします。テスト スキーマで変更セットの例を確認できます。
リレーションシップのフォームから結果を渡すとき、変更セット内での結果の操作を容易にするために、いくつかの強制が行われます。コレクション チェックボックスの場合は、選択したオプション ID の配列を変更セットに渡します。これにより、ここで示すように、それらを取得して put_assoc を使用できるようになります。
多くの削除をサポートするには、スキーマに仮想属性を設定する必要があります。関連するスキーマでは、フォーム内の destroy プロパティを追跡できるように、_destroy 仮想属性を追加する必要があります。これを変更セットでキャストする必要もあります。以下は変更セットの例です。このシナリオでは、ユーザーは多くの製品を所有しており、製品は削除できます。私たちにも多くの役割が関連付けられています。
defmodule TestExAdmin.User は実行します Ecto.Changeset をインポート Ecto.Schema を使用する Ecto.Query をインポートする スキーマ "users" dofield :name、:stringfield :email、:stringfield :active、:boolean、default: truehas_many :products、TestExAdmin.Product、on_replace: :deletemany_to_many :roles、TestExAdmin.Role、join_through: TestExAdmin.UserRole、on_replace: :消去 終わり @fields ~w(アクティブなメールアドレスの名前) def changeset(model, params %{}) domodel|> Cast(params, @fields)|> validate_required([:email, :name])|> Cast_assoc(:products, required: false)|> add_roles(params) 終わり def add_roles(changeset, params) doif Enum.count(Map.get(params, :roles, [])) > 0 do ids = params[:roles] role = TestExAdmin.Repo.all(TestExAdmin.Role の r から、ここで: r.id in ^ids) put_assoc(changeset, :roles,roles)elsechangesetend endenddefmodule TestExAdmin.Role do Ecto.Schema を使用する Ecto.Changeset をインポート エイリアス TestExAdmin.Repo スキーマ "ロール" dofield :name, :stringhas_many :uses_roles, TestExAdmin.UserRolemany_to_many :users, TestExAdmin.User, join_through: TestExAdmin.UserRole 終わり @フィールド ~w(名前) def changeset(model, params %{}) domodel|> Cast(params, @fields) endenddefmodule TestExAdmin.Product do Ecto.Schema を使用する Ecto.Changeset をインポート スキーマ "products" dofield :_destroy、:boolean、virtual: truefield :title、:stringfield :price、:decmalbelongs_to :user、TestExAdmin.User 終わり def changeset(schema, params %{}) doschema|> Cast(params, ~w(タイトル価格 user_id))|> validate_required(~w(タイトル価格))|> mark_for_deletion 終わり defp mark_for_deletion(changeset) do# delete が設定されていて true の場合、アクションを変更しましょうif get_change(changeset, :_destroy) do %{changeset | :_destroyアクション: :delete}elsechangesetend 終わる
これらの関係がどのように機能するかを説明する優れたブログ投稿が Platformatec ブログにあります: http://blog.plataformatec.com.br/2015/08/working-with-ecto-associations-and-embeds/
表示するフィールドを定義するには、 index do
コマンドを使用します。
管理者/my_model.ex
defmodule MyProject.ExAdmin.MyModel を実行します ExAdmin.Register を使用する register_resource MyProject.MyModel doindex do selectable_column() column :id column :name events() # デフォルトのアクションを表示します columnend 終わる
次の例は、 form
マクロを使用してフォームをカスタマイズする方法を示しています。
defmodule MyProject.ExAdmin.Contact do ExAdmin.Register を使用する register_resource MyProject.Contact doform contact do inputs doinput contact, :first_nameinput contact, :last_nameinput contact, :emailinput contact, :register_date, type: Date # Ecto を使用する場合 :date タイプを scheminput contact, :category, collection: MyProject.Category .all end inputs "グループ" doinputs :groups, as: :check_boxes,コレクション: MyProject.Group.all 終わる
次の例は、表示ページを変更する方法を示しています。
defmodule MyProject.ExAdmin.Question を実行します ExAdmin.Register を使用する register_resource MyProject.Question domenu priority: 3show question doattributs_table # デフォルトの属性を表示 # 質問の選択肢をリストするパネルを作成 pane "Choices" dotable_for(question.choices) do column :key column :nameend endend 終わる
カスタム フィールド タイプのサポートは、レンダリング フィールドと入力コントロールの 2 つの領域で行われます。
ExAdmin でサポートされていないレンダリング タイプには、 ExAdmin.Render.to_string/
プロトコルを使用します。
たとえば、タプルのレンダリングをサポートするには、次のファイルをプロジェクトに追加します。
# lib/render.exdefimpl ExAdmin.Render、for: タプル do def to_string(タプル)、実行:inspect(タプル)end
:field_type_matching
構成アイテムを使用して、入力タイプを設定します。
たとえば、次のプロジェクトがあるとします。
defmodule ElixirLangMoscow.SpeakerSlug は実行します EctoAutoslugField.Slug を使用します。[:name, :company] から :slugenddefmodule ElixirLangMoscow.Speaker までです。 ElixirLangMoscow.Web、:modelを使用 Arc.Ecto.Model を使用する エイリアス ElixirLangMoscow.SpeakerSlug スキーマ「スピーカー」 dofield :slug、SpeakerSlug.Typefield :avatar、ElixirLangMoscow.Avatar.Type 終わる
プロジェクトの構成に以下を追加します。
設定:ex_admin、 # ... field_type_matching: %{ElixirLangMoscow.SpeakerSlug.Type => :string,ElixirLangMoscow.Avatar.Type => :file }
ExAdmin は 2 つのテーマをサポートしています。新しい AdminLte2 テーマはデフォルトで有効になっています。下位互換性を必要とする場合には、古い ActiveAdmin テーマもサポートされています。
テーマを ActiveAdmin に変更するには、 config/config.exs
ファイルに以下を追加します。
config/config.exs
設定:ex_admin、 テーマ: ExAdmin.Theme.ActiveAdmin、 ...
AdminLte2 テーマには、青、黒、紫、緑、赤、黄、青光、黒光、紫光、緑光、赤光、黄光などのさまざまな肌の色があります。
肌の色を紫などに変更するには:
config/config.exs
設定:ex_admin、 肌の色: :紫、 ...
以下をconfig/config.exs
ファイルに追加することで、メニュー バーの右上にテーマ セレクターを追加できます。
config/config.exs
設定:ex_admin、 テーマセレクター: [{"AdminLte", ExAdmin.Theme.AdminLte2},{"ActiveAdmin", ExAdmin.Theme.ActiveAdmin} ]、 ...
モジュールでmodel_name/0
関数を定義することで、モデルの名前をオーバーライドできます。これは、一部のアクションに別のモジュールを使用する場合に便利です。
管理者/my_model.ex
def モデル名 do 「カスタム名」終了
ExAdmin は、認証の仕事をサードパーティのパッケージに任せます。 Coherenceの使用例については、Contact Demo Projectをチェックしてください。
認証の追加の詳細については、Wiki を参照してください。
ExAdmin への貢献に感謝いたします。詳細については、CODE_OF_CONDUCT.md および CONTRIBUTING.md ガイドを確認してください。通常、機能とバグのリストを問題トラッカーに保存します。
ExAdmin デモの詳細な例
簡単なチュートリアルについては、Elixir Survey チュートリアルをご覧ください。
ライブデモ
ドキュメント
ex_admin
は著作権 (c) 2015-2016 E-MetroTel です。
ソースコードは MIT ライセンスに基づいて公開されています。
詳細については、ライセンスを確認してください。