检查对象数组是否包含数组中的任何对象

Check if an array of objects include any object from an array

我有一个名为 posts 的对象数组,我在 c1 中有一条评论作为用户 Bob 的评论数组。 post 和评论之间的关系是 Post 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 是 return 一个数组项,而 c1 有一个数组项,如上面代码部分的注释所示,比较两个值 return true 而 p.comments.include?(c1) return 错误。我想过滤所有包含 Bob 评论的 post。

您想 include 将相关记录添加到您的查询中,然后相应地过滤它们:

Post.includes(:comments).where(comments: { user: 'Bob' })

这里有一些关于 Rails Active Record 查询的更多信息

https://guides.rubyonrails.org/active_record_querying.html

不确定你的主要任务是什么,但让我猜猜:

如果您想输出用户的评论 - 您需要使用关联并避免使用 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