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

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

- [Rails管理画面gem の新星！administrate を使おう - その0 紹介 - Qiita](http://qiita.com/mm36/items/253b32f152aa94e93fda)
- この記事
- [Rails管理画面gem の新星！administrate を使おう - その2 基本カスタマイズ - Qiita](http://qiita.com/mm36/items/b21ffa65b97246fd8396)
- [Rails管理画面gem の新星！administrate を使おう - その3 有名Gemと連携 - Qiita](http://qiita.com/mm36/items/bd70adb4a80071f0c015)
- [TBD] Rails管理画面gem の新星！administrate を使おう - その4 もっとカスタマイズ！

- - -


さて。早速Administrateを使ってみましょう！
導入はとっても簡単。
公式ドキュメントに沿っていけば大体大丈夫。。

[administrate-prototype.herokuapp.com/getting_started](http://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
```

## <i class="fa fa-eye"></i> 注意！！

v0.1.3 現在、 ``` administrate:install ``` 実行時にエラーが発生して途中で generator がストップする場合がある。

``` error
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](https://github.com/thoughtbot/administrate/pull/435)

今後バージョンが上がったら 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](http://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 を克服する回はのちほど・・