【Rails】Administrateでモデルを持たないページ(Rootページ)を作成
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
を作ってやればうまく表示されると思います。