Rails - 如何进行此查询?获得每条记录之一

时间:2013-01-26 19:50:55

标签: ruby-on-rails postgresql rails-activerecord

我有一个BlogPost模型,其:category属性。我正在创建一个新的BlogPost表单,我希望选择菜单可以填充用户在先前记录中输入的每个类别。

因此,我需要一个查询来查找带有BlogPosts的所有User ID,然后将他们输入的每个类别的列表四舍五入。多个记录中将存在相同的类别,但当然我只想为选择菜单返回它的副本。

谢谢:)

1 个答案:

答案 0 :(得分:2)

您可以SELECT DISTINCT个类别向正确的用户返回INNER JOIN

Category
  .joins( :posts )
  .where( posts: { user_id: current_user.id } )
  .uniq

这应该发送如下查询:

SELECT DISTINCT categories.*
FROM categories
  INNER JOIN posts ON posts.category_id = categories.id
WHERE posts.user_id = [whatever]

编辑注意:要警惕uniq既是Relation又是Array的方法。一定要在它被转换为数组之前在关系上调用它,否则你将在一系列非独特结果上执行uniq,这也是有效的,但在性能方面是荒谬的。