LoginSignup
0
0

More than 5 years have passed since last update.

Rails5 uninitialize constant Postscontrollerのエラー表示が出て悩んだ件

Posted at

uninitailize constantへの対応はどうすべきか

昨日からこのエラー表示が出てきて、自分もかなりの時間(それでも1日ほど)悩まされたので、一応備忘録として残しておく。

Postsコントローラーが何とかというのは、わかるが、何が問題なのか調べたところ、どうやらPosts_controller.rbつまり、Postsコントローラーのファイルが存在するかどうかを疑うべきらしい。
まずは、下記がroutes.rbで定義しているURLです。

new_user_session GET    /users/sign_in(.:format)       devise/sessions#new
            user_session POST   /users/sign_in(.:format)       devise/sessions#create
    destroy_user_session DELETE /users/sign_out(.:format)      devise/sessions#destroy
       new_user_password GET    /users/password/new(.:format)  devise/passwords#new
      edit_user_password GET    /users/password/edit(.:format) devise/passwords#edit
           user_password PATCH  /users/password(.:format)      devise/passwords#update
                         PUT    /users/password(.:format)      devise/passwords#update
                         POST   /users/password(.:format)      devise/passwords#create
cancel_user_registration GET    /users/cancel(.:format)        devise/registrations#cancel
   new_user_registration GET    /users/sign_up(.:format)       devise/registrations#new
  edit_user_registration GET    /users/edit(.:format)          devise/registrations#edit
       user_registration PATCH  /users(.:format)               devise/registrations#update
                         PUT    /users(.:format)               devise/registrations#update
                         DELETE /users(.:format)               devise/registrations#destroy
                         POST   /users(.:format)               devise/registrations#create
                   posts GET    /posts(.:format)               posts#index
                         POST   /posts(.:format)               posts#create
                new_post GET    /posts/new(.:format)           posts#new
               edit_post GET    /posts/:id/edit(.:format)      posts#edit
                    post GET    /posts/:id(.:format)           posts#show
                         PATCH  /posts/:id(.:format)           posts#update
                         PUT    /posts/:id(.:format)           posts#update
                         DELETE /posts/:id(.:format)           posts#destroy
              posts_find POST   /posts/find(.:format)          posts#find

考えられる問題点

今回、root_path/postsを叩いた時にタイトルのようなエラーが表示された。これは、rails sした時に、この叩いたURLのcontrollerファイルをrails側で探してきて、存在しない場合、タイトルのようなエラーが表示されるような仕組みらしい。

ただ、探したところposts_controller.rbファイルは存在した。この時、もう一つ気をつけないといけない点が、controller名は複数形でないとならないというrailsの命名規則に基づいているかどうかも考えなければならない。
今回、自分はこの命名規則に基づいてcontrollerを生成していたので、ここが問題ではなかった。

次に、考えるべきところが、ファイルパスである。ここで、問題が生じていた。
app/controllers/posts/posts_controller.rb
このようにcontrollerディレクトリ以下から、さらにpostsディレクトリを生成して、そのpostsディレクトリ以下に、posts_controller.rbファイルを管理していた。

対策

デフォルトでのrailsでは、controllersディレクトリ以下のみを読み取るようになっており、これを上記のようなファイルパスで読み取るようにする場合は、どうやらinitialize/config以下でさらに設定を行なわなければならないらしい。
とりあえず
app/controllers/posts_controller.rb
という感じでposts_controller.rbファイルをcontrollersディレクトリ以下にすると、エラーが解消された。

このエラーはcontrollerだけではなく、modelsディレクトリ以下でも上記と同じような事でエラーになるので、気をつけるべきかと・・

以下がtwitterになります。
https://twitter.com/FujisawaRyohei
フォローよろしくお願いします。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0