我会尽可能的解释这个.我有一个关于用户帖子的查询:
@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
解决方法
只需使用以下内容:
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')