Rails过滤相关记录

时间:2017-08-21 11:50:20

标签: ruby-on-rails ruby join activerecord

我有帖子和评论模型 发布has_many:commetns 评论belongs_to:post 我想检索来自某个用户的评论的所有*帖子。 (所以我想得到每一篇文章(甚至是那些没有评论的帖子),并过滤掉某些用户创建的评论)

现在我尝试过这样的事情:

Post.all.includes(:comments).where('comments.post_id IS NULL OR comments.user_id = ?' id).references(:comments)

它将帖子评论过滤掉我想要的帖子,但是如果Post没有其他评论而不是过滤掉的评论它不会返回此帖子(显然它会被where子句拒绝...)

Post.all.joins('LEFT JOIN comments c ON c.post_id = posts.id AND c.user_id = ' + sanitize(id))

它返回所有帖子,但过滤不起作用......

1 个答案:

答案 0 :(得分:2)

不幸的是,这个问题没有优雅的解决方案。可以预加载与静态过滤器的关联,例如:

User.eager_load(:popular_comments)

但它不适用于动态文件管理器。

您可以在此处找到有关预加载Rails关联的优秀文章http://blog.arkency.com/2013/12/rails4-preloading/