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
フォローよろしくお願いします。