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

Posted

技术标签:

【中文标题】检查对象数组是不是包含数组中的任何对象【英文标题】:Check if an array of objects include any object from an array检查对象数组是否包含数组中的任何对象 【发布时间】:2019-07-26 12:44:08 【问题描述】:

我有一个称为帖子的对象数组,并且我在 c1 中有一个评论,作为用户 Bob 的 cmets 数组。帖子和评论之间的关系是,帖子有_许多评论。

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.cmets 返回一个数组项,而 c1 有一个数组项,如上面代码部分中的 cmets 所示,比较这两个值返回 true,而 p.cmets.include?(c1) 返回 false。我想过滤所有包含 Bob 的 cmets 的帖子。

【问题讨论】:

【参考方案1】:

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

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

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

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

【讨论】:

【参考方案2】:

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

如果您想从用户那里输出 cmets - 您需要使用关联并避免使用 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

【讨论】:

以上是关于检查对象数组是不是包含数组中的任何对象的主要内容,如果未能解决你的问题,请参考以下文章

检查 Json 数组是不是包含逻辑应用程序中的对象

如何检查包含另一个对象数组的对象数组是不是具有属性

检查对象数组是不是包含对象

如何检查数组是不是包含至少一个对象?

检查数组是不是包含某个对象

检查对象数组是不是包含某个键