はじめに
「ActiveRecord::AssociationNotFoundError in Tweet#index」エラー向けの記事になります。
エラー勉強会の復習した時に、疑問に思ったのでアウトプットしてみました。
Associationと出てる時点で、DBの問題であると考える事ができますが、今回は掘り下げてみたいと思います。
エラーの意味
エラーの通りで、tweet_controllerのindexアクションでAssociationが見つからないエラーです。
Associationとは
DBに構築されているテーブルの関連付ける事を指しています。
今回は、下図のようなAssciationを組んでいる時に起こるエラーとなります。
まずは、tweet_controllerのindexアクションをみてみます。
app/controllers/tweet_controller.rb
記述に問題はありませんが、SQLを読み込むincludeメソッドにエラーが起きている事が分かります。
:userはUserモデルの事を指しているので、 Userモデルを見てみます。
記述に問題はなさそうです。
has_manyの復習すると、 has_many モデル名(複数) という記述をします。
userはtweetとcommentの1対多の関係になります。
そうすると、他のtweetモデルかcommentモデルに問題があると考えます。
ようやくエラー元を見つけました。 belongs_to :usersが悪さをしていました。
belongs_to モデル名(単数) と定義されます。
ここで :users ⇨ :user に直すとエラーが解消されます。
tweetモデルとuserモデルが、associationができていなかった為にエラーが出てたようです。
参照文献:railsガイド