やすまんの技術ブログ

駆け出しエンジニアが日々学んだこと、わからなかったことなどをまとめておくブログ。忘備録としても使います。

Couldn't find Group with 'id'= の解決方法

メッセージ送信機能を実装中に発生。

 

結論

routes.rbで入れ子構造にしていなかったから。

 

経緯

Couldn't find Group with 'id'=

の意味は、グループI'dが持ってこれないよと言っている。

ということは、

  • データベースに「group_id」の記述がない
  • コントローラに問題がある。

のどちらかに絞られると考えました。

データベースには記述はあったので、データベースに「group_id」が存在することがわかった。

コントローラに記述ミスがないか確認し、あまり関係のないところではあるがミスがあったのでそこを修正し、再度リロードしたが結果は変わらない。

 

なので、

byebug pryをしてコントローラの動きを止めて、もう一度確認すると、

group_idの値がnilになっていた。

そしてrake routesをターミナル上でかけてみると、

そもそもgroup_idに関する記述がないことがわかった。

これにより、ルーティングがおかしいことに気づく。

ルーティングを見てみると、今回の場合、

messagesの中にgroupがあるため、入れ子構造にしないといけないのだが

  resources :groupsonly: [:new:create:edit
:update
    resources :messagesonly: [:create:index]
 

 

doとendが抜けているではないか!

 

したがって

  resources :groupsonly: [:new:create:edit
:updatedo
    resources :messagesonly: [:create:index]
  end

 

にしてあげれば解決でき流ということです。