我希望能够显示喜欢用户帖子的用户。我将提供一些简单的信息,这样这个问题就不会变得不堪重负。
我涉及三个类:用户、分享和意见。他们的模型也是这样设置的:
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 和current_user.id
是 5。它的查询主要包括内部连接意见以具有like_id
AND 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
意见模型保持不变。