読者です 読者をやめる 読者になる 読者になる

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の継承と有無についても検証してみると良いでしょう。