ユーザーの投稿を高く評価したユーザーを表示できるようにしたいと思います。この問題が圧倒されないように、簡単な量の情報を提供します。
私には、ユーザー、共有、意見の3つのクラスが関係しています。それらのモデルも同様に設定されています。
class User
has_many :opinions, foreign_key: "fan_id", dependent: :destroy
end
class Share
has_many :opinions, foreign_key: "like_id", dependent: :destroy
has_many :likes, through: :opinions
has_many :agreeables, foreign_key: "fan_id", class_name: "Opinion", dependent: :destroy
has_many :fans, through: :agreeables
end
class Opinion
belongs_to :fan, class_name: "User"
belongs_to :like, class_name: "Share"
end
言い換えれば: like_id = share.id
&fan_id = user.id
次に、私のコントローラーで:
SharesController
def show
@share = Share.find(params[:id])
@shares = @share.fans.paginate(page: params[:page])
end
リンクをクリックするとshare_path
、ページがレンダリングされますが、何も表示されません。SQLログを見ると、次の問題に気づきます。
like_id
レンダリングされた共有( )を共有を気に入ったユーザー()と一致させることは、意見を正しく結合することではありませんfan_ids
。
share.id
が11で、が5であるとしましょう。このクエリは、主にANDcurrent_user.id
を持つための内部結合意見で構成されています。like_id
fan_id = 11
この問題を修正する方法や、より実用的な代替方法についてのアイデアはありますか?
ご協力いただきありがとうございます。
編集
将来の読者のために、解決策は次のとおりでした。
class User
has_many :fans, foreign_key: "fan_id", class_name: "Opinion", dependent: :destroy
end
class Share
has_many :opinions, foreign_key: "like_id", dependent: :destroy
has_many :likes, through: :opinions
has_many :fans, through: :opinions
end
そして、SharesController
andOpinionモデルは変更されませんでした。