Rails从集合中选择不同的关联

时间:2018-04-18 03:07:38

标签: ruby-on-rails activerecord

我们说我有一个模型Post和一个模型User。鉴于一组帖子(@posts),我如何才能获得独特的作者?

这很有效,但由于显而易见的原因很糟糕:@posts.map(&:author).uniq(&:id)

稍微好一点的方法是:User.where(id: @posts.pluck(:author_id))

有更好的方法吗?

1 个答案:

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