1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?