我希望能够向喜欢用户帖子的用户展示。我将提供一些简单的信息,因此这个问题不会让人不知所措。
我有三个课程:用户,分享和意见。他们的模型同样建立:
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 {{1 }}
有关如何解决此问题或更实用的替代方法的任何想法?
感谢您的帮助。
修改
对于任何未来的读者,解决方案如下:
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
和意见模型保持不变。
答案 0 :(得分:1)
如果您希望获得所有喜欢Share
的用户,则以下代码就足够了:
class User
has_many :opinions, foreign_key: "fan_id", dependent: :destroy
has_many :shares, through: :opinions
end
class Share
has_many :opinions, foreign_key: "like_id", dependent: :destroy
has_many :fans, through: :opinions # I'm not sure, but you might need to add class_name option here
end
class Opinion
belongs_to :fan, class_name: "User"
belongs_to :like, class_name: "Share"
end
在你的控制器中,
@shares = @share.fans.paginate(page: params[:page])
将返回用户(粉丝)列表