ruby-on-rails – rails where()sql在数组上查询

我会尽可能的解释这个.我有一个关于用户帖子的查询:

@selected_posts = Posts.where(:category =>“Baseball”)

我想写下列声明.这里是伪造的:

User.where(用户在@selected_posts中有一篇文章)

请记住,我有很多关系设置,所以post.user是可用的.

有任何想法吗?

/编辑

@posts_matches = User.includes(@selected_posts).map{ |user|

      [user.company_name,user.posts.count,user.username]

    }.sort

基本上,我需要上面的工作,所以它使用的用户在selected_posts中发布,而不是我们在我们的数据库中的每个用户.

解决方法

只需使用以下内容:
User.find(@selected_posts.map(&:user_id).uniq)

这将从所有选定的帖子中获取用户ID,将其转换为数组,并删除任何重复项.将数组传递给用户将只找到具有匹配ids的所有用户.问题解决了.

要将此与您在问题中显示的内容相结合,您可以写:

@posts_matches = User.find(@selected_posts.map(&:user_id).uniq).map{ |user|
  [user.company_name,user.posts.size,user.username]
}

使用大小来计算一个关系,而不是计数,因为Rails缓存大小方法,并且自动不会多次查找.这是更好的性能.

不确定您在查询结尾时使用Array#排序完成哪些操作,但您可以随时执行以下操作:

@users_with_posts_in_selected = User.find(@selected_posts.map(&:user_id).uniq).order('username DESC')

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...