Administrate
管理画面を簡単に作れるgemで、カスタマイズが他のものよりも容易である点が特徴っぽいです。
github.com
今回使用したバージョン
# Gemfile.lock
administrate (0.11.0)
administrate-field-nested_has_many (1.1.0)
トップページ
ルーティングはこのような感じで行います。root toで指定したページが/admin以下のルートページとして使用されるようです。
Rails.application.routes.draw do namespace :admin do resources :users resources :hoges root to: "root#index" end end
gemの特性
名前空間admin内に指定したものが自動的にadministrateの管轄下に置かれる?そうで、自動的にindexページやナビゲーションバー(他ページへのリンク)などが生成されます。便利。
しかし、このせいでモデルが準備されていないただのページを作ることができません。例えば上のルーティングはRootController#indexをたどると思うのですが、Rootなんてモデルは存在しない(作らないし)ので、エラーになります。
解消法
このエラーは、ナビゲーションバーを生成する際に起きているっぽいので、指定したモデルのみサイドバーに表示させるようにすることで回避します。
- まず、administrateのlayoutファイルを書き出します。
$ bin/rails generate administrate:views:layout
これで生成されたうちのapp/views/admin/application/_navigation.html.erbを編集します。(今回slimに書き換えてます。)
- eachで回している部分を表示したいモデル名のみに書き換えます。今回はベタ書きしていますが、Globalなんかで別ファイルに定義するといいと思います。下のようにします。
nav.navigation role="navigation" - ['users','hoges'].each do |resource| = link_to( ....
こうすることで、Rootなんて存在しないモデルを探索しなくなるのでエラーが出なくなりました。後は、administrateの指定通りにControllerとviewを作ってやればうまく表示されると思います。