LoginSignup
25
32

More than 5 years have passed since last update.

Rails管理画面gem の新星!administrate を使おう - その1 導入

Last updated at Posted at 2016-02-28

この記事は Rails管理画面gem の新星!administrate を使おう その1です。
関連記事はこちら


さて。早速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
ダッシュボードに表示するリソースを定義します。

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 に追記されます。

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 に出てこない)

app/dashboards/dashboard_manifest.rb
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 を克服する回はのちほど・・

25
32
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
25
32