Rails "uninitialized constant ****Controller" の対処法
開発環境 OS X 10.9.5 rails 4.2.0 ruby 2.1.0 devise carrierwave mini_magick
問題
root_url/admin
にアクセスした際に、"Routing Error uninitialized constant AdminController" と出た。
結論
・admin_controller.rb が存在していなかった。
・Controllerの継承を意識していなかった。
データ構造
deviseでサインアップする際に、アイコン画像を設定できるようにするために、Strong Parametersに"icon"パラメータを追加した。また、肥大化を防ぐためにControllerが若干複雑になっている。
なお、rooturl/admin では、ログインしているユーザーの投稿一覧が表示されるようにしたい。
# config/routes.rb ~~中略~~ match 'admin', to: 'admin#show', via: 'get' ~~中略~~
# controllers/application_controller.rb class ApplicationController < ActionController::Base before_filter :configure_permitted_parameters, if: :devise_controller? protect_from_forgery with: :exception protected def configure_permitted_parameters devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:screen_name, :icon, :remote_icon_url, :email, :encrypted_password, :password) } end end
# controllers/authorized_controller.rb class AuthorizedController < ApplicationController before_action :authenticate_user! end
対処
肝心のAdminControllerが存在していなかったため、controllers/admin_controller.rb を作成。
# controllers/admin_controller.rb class AdminController < AuthorizedController def show @articles = current_user.articles end end
その後ページをリフレッシュして解決。
このエラーに遭遇したら、ルーティングだけではなく、Controllerの継承と有無についても検証してみると良いでしょう。