ruby-on-rails – rails where()sql在数组上查询
发布时间:2020-12-16 19:25:21 所属栏目:百科 来源:网络整理
导读:我会尽可能的解释这个.我有一个关于用户帖子的查询: @selected_posts = Posts.where(:category =“Baseball”) 我想写下列声明.这里是伪造的: User.where(用户在@selected_posts中有一篇文章) 请记住,我有很多关系设置,所以post.user是可用的. 有任何想法
我会尽可能的解释这个.我有一个关于用户帖子的查询:
@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') (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |