我们说我有一个模型Post
和一个模型User
。鉴于一组帖子(@posts
),我如何才能获得独特的作者?
这很有效,但由于显而易见的原因很糟糕:@posts.map(&:author).uniq(&:id)
。
稍微好一点的方法是:User.where(id: @posts.pluck(:author_id))
。
有更好的方法吗?
答案 0 :(得分:1)
User.where(id: @posts.select('distinct author_id'))
OR
User.where(id: @posts.pluck('distinct author_id'))
将在SQL查询中应用'DISTINCT'(而非Array #uniq)
注意:强>
如果您尝试获取用户的activerecord关系,“Distinct”将无用,因为“ID”在用户表中已经是唯一的,您将不会获得任何重复的用户。
但是,如果您只需要一组唯一的author_id,则可以使用@posts.map(&:author_id).uniq