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

时间:2019-03-05 05:50:09

标签: ruby-on-rails arrays ruby-on-rails-3.2

我有一个称为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。我想过滤所有包含鲍勃评论的帖子。

2 个答案:

答案 0 :(得分:1)

您想要将相关记录include放到查询中,然后相应地对其进行过滤:

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

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

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

答案 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