この記事は Rails管理画面gem の新星!administrate を使おう その1です。
関連記事はこちら
- Rails管理画面gem の新星!administrate を使おう - その0 紹介 - Qiita
- この記事
- Rails管理画面gem の新星!administrate を使おう - その2 基本カスタマイズ - Qiita
- Rails管理画面gem の新星!administrate を使おう - その3 有名Gemと連携 - Qiita
- [TBD] Rails管理画面gem の新星!administrate を使おう - その4 もっとカスタマイズ!
さて。早速Administrateを使ってみましょう!
導入はとっても簡単。
公式ドキュメントに沿っていけば大体大丈夫。。
administrate-prototype.herokuapp.com/getting_started
この記事では↑の Getting Started に記載されていることの範囲を超える内容はほとんどありません。(一部 generator の不具合エラー発生について記載あり、くらい)
gem のインストール
# Gemfile
gem 'administrate', "~> 0.1.3"
で bundle install
railsプロジェクトにインストール
bundle installが終わったら、Railsにインストールして、初期ファイルを生成。
> ./bin/rails generate administrate:install
以下の2ファイルが生成される。
- app/controllers/admin/application_controller.rb
- app/dashboards/dashboard_manifest.rb
app/controllers/admin/application_controller.rb
は
Administrateの全コントローラーの親玉です。
認証の導入などする際はこのファイルをカスタマイズします。
app/dashboards/dashboard_manifest.rb
は
ダッシュボードに表示するリソースを定義します。
class DashboardManifest
# ダッシュボードに追加するresourceをここで定義
# 途中で新しいリソースを追加する時はここに!
# ここで追加されたリソースから管理画面のroutesを作成 (config/routes.rb参照)
DASHBOARDS = [
:users,
:customers,
:products,
:orders,
:line_items,
]
# `ROOT_DASHBOARD`
# at "http://your_site.com/admin"
#
# 管理画面ルートパスで表示するものを指定している。
# 上記 DASHBOARDS で定義したものの1個目を指定することが多いけど、別になんでも良い
ROOT_DASHBOARD = DASHBOARDS.first
end
注意!!
v0.1.3 現在、 administrate:install
実行時にエラーが発生して途中で generator がストップする場合がある。
uninitialized constant Administrate::Generators::InstallGenerator::DashboardManifest
↑こんな感じ。
一度 administrate:install
しているのに、もう一度呼んでしまった場合に発生する、と issues に書いてあるが、初回でも発生する場合があるらしい。
解決策は、
> DISABLE_SPRING=1 rails generate administrate:install
でOK.
参考URL: Add DISABLE_SPRING=1 to README by buren · Pull Request #435 · thoughtbot/administrate
今後バージョンが上がったら README に追記されるらしい。
Modelが定義済みの場合
Modelが定義されている場合は、DASHBOARDSにされる。
それぞれのModelごとにcontroller, dashboardも作られる。
例: Product model
- app/controllers/admin/productss_controller.rb
- app/dashboards/product_dashboard.rb
が作られる。
routes の変更を確認
以下のように config/routes.rb
に追記されます。
namespace :admin do
# DASHBOARDSからリソースのルートを定義
DashboardManifest::DASHBOARDS.each do |dashboard_resource|
resources dashboard_resource
end
root controller: DashboardManifest::ROOT_DASHBOARD, action: :index
end
Dashboard に 新しい Model を追加する
一旦 administrate:install
後に Model を追加した場合。
個別に Model 名を指定して、 dashboard を作る。
例: Model name : Item
$ ./bin/rails generate administrate:dashboard item
以下のファイルが生成される。
- app/controllers/admin/items_controller.rb
- app/dashboards/item_dashboard.rb
メインの app/dashboards/dashboard_manifest.rb
にある DASHBOARDS
に定義を追加するのを忘れないように。
(ここに追加しないと routes に出てこない)
class DashboardManifest
DASHBOARDS = [
:users,
:customers,
:products,
:orders,
:line_items,
:items, # 追加
]
...
こんな感じでバシバシ管理画面にリソースを追加できる。
Model の Dashboard
administrate-prototype.herokuapp.com/customizing_dashboards
- ATTRIBUTE_TYPES : 対象の Model Dashboard で使える属性値の定義
- COLLECTION_ATTRIBUTES : index page に表示される項目
- SHOW_PAGE_ATTRIBUTES : show page に表示される項目
- FORM_ATTRIBUTES : form page に表示される項目
見たまんまや・・
現在使えるFieldのタイプは
- Field::BelongsTo
- Field::Boolean
- Field::DateTime
- Field::Email
- Field::HasMany
- Field::HasOne
- Field::Image
- Field::Number
- Field::Polymorphic
- Field::String
ですが、PolymorphicはFormの入力をサポートしていません。
(「サポートしてないってメッセージを表示する」という方法でサポートしている・・・)
Polymorphic association を克服する回はのちほど・・