LoginSignup
1
0

More than 3 years have passed since last update.

[Rails] ActiveRecord::HasManyThrough Order Error in Users#show

Posted at

環境

Rails 6.0.3.2
ruby 2.6.5p114 (2019-10-01 revision 67812)
vscode

本稿の趣旨

https://qiita.com/tenitiumai/items/3d9466d7a24197f690bb 
を参考にしてDM機能を作成することを目標とする。

 しかし、本稿は、エラーの解決方法を紹介するため、
具体的なDM機能の作成手順については割愛する(上記の参考記事を参照していただきたい)。

該当のエラー

スクリーンショット 2020-09-09 12.51.19.png

エラーの原因

参考記事 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が読み込まれているため、エラーが生じていると推測できる。

解決方法

コードを見ると、

app/models/user.rb

  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より上にある。これを

app/models/user.rb

  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ボタンを配置したユーザー詳細ページにアクセスすると、
スクリーンショット 2020-09-09 13.15.47.png

無事解決しました。

おわりに

モデルの順序でエラーが生じることになるとは思わなかった。
これからはその点も意識していこうと思いました。

1
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
1
0