#環境
Rails 6.0.3.2
ruby 2.6.5p114 (2019-10-01 revision 67812)
vscode
#本稿の趣旨
https://qiita.com/tenitiumai/items/3d9466d7a24197f690bb
を参考にしてDM機能を作成することを目標とする。
しかし、本稿は、エラーの解決方法を紹介するため、
具体的なDM機能の作成手順については割愛する(上記の参考記事を参照していただきたい)。
#エラーの原因
参考記事 https://qiita.com/krppppp/items/0db4184e9df553f05048
これは、 Cannot have a has_many:through association 'User#followers' which goes through 'User#follower_relationships' before the through associations is defined. に注目する。
どうやら、モデルの配置順序が間違っていることが原因である。
具体的には、follower_relationshipsが読み込まれる前にfollowersが読み込まれているため、エラーが生じていると推測できる。
#解決方法
コードを見ると、
has_many :followers, through: :follower_relationships
has_many :follower_relationships, foreign_key: "following_id", class_name:
"Relationship", dependent: :destroy
has_many :followings, through: :following_relationships
となっており、followersが、follower_relationshipsより上にある。これを
has_many :followings, through: :following_relationships
has_many :follower_relationships, foreign_key: "following_id", class_name:
"Relationship", dependent: :destroy
has_many :followers, through: :follower_relationships
とすれば、解決するのではないか。
DMボタンを配置したユーザー詳細ページにアクセスすると、
無事解決しました。
#おわりに
モデルの順序でエラーが生じることになるとは思わなかった。
これからはその点も意識していこうと思いました。