我有一个称为posts的对象数组,并且在c1中有一个注释,作为用户Bob的注释数组。帖子和评论之间的关系是,帖子has_many评论。
c1 = Comment.where(user: "Bob")
# c1 contains comment array, e.g. [#<Comment id: 23, ... >]
posts = Post.all.select{|p| p.comments.include?(c1) }
# p.comments returns comments for that post, e.g. [#<Comment id: 23, ... >]
如果p.comments返回一个数组项,而c1有一个数组项,如上面代码部分的注释所示,则比较两个值都返回true,而p.comments.include?(c1)返回false。我想过滤所有包含鲍勃评论的帖子。
答案 0 :(得分:1)
您想要将相关记录include
放到查询中,然后相应地对其进行过滤:
Post.includes(:comments).where(comments: { user: 'Bob' })
有关Rails Active Record查询的更多信息
答案 1 :(得分:0)
不确定您的主要任务是什么,但让我猜一下:
如果要从用户输出注释,则需要使用关联,并避免使用ruby代码。
例如,您可以添加以下内容:
class User
has_many :commented_posts, class_name: "Post", through: :comments, sources: :commentable
# or source: :post (not sure what relation you have)
# so you can do @user.commented_posts