检索rails关联的反向多个记录

时间:2014-10-05 16:18:00

标签: ruby-on-rails ruby

我有两种型号的产品和类别。

我可以像Category.products等那样成功地进行查询。

Product.rb

belongs_to :category

Category.rb

has_many :products

现在我想只检索那些至少有一个现有产品的类别。

我试过这样:

 @categories = Category.where(Category.products.present?) 

#return error undefined方法`产品'也改为产品不起作用。

2 个答案:

答案 0 :(得分:1)

您需要的只是内部联接。它将跳过那些没有产品的类别。要在连接表上添加条件,您可以使用rails 4的语法:

@categories = Category.joins(:products).where(products: { with_operator: true }).uniq

它将生成下一个sql查询:

SELECT DISTINCT "categories".*
FROM "categories" INNER JOIN "products" ON "products"."category_id" = "categories"."id"
WHERE "products"."with_operator" = 't'

答案 1 :(得分:1)

获取您需要的评论产品的类别以及产品属性with_operator为true,您可以使用" rails style"使用joinsmerge

@categories = Category.joins(:products).merge(Product.where(with_operator: true)).uniq

将生成以下SQL:

SELECT DISTINCT "categories".* FROM "categories" INNER JOIN "products" ON "products"."category_id" = "categories"."id" WHERE "products"."with_operator" = 't'

你也可以使用rails 4语法,如@yukke所指示的那样:

Category.joins(:products).where(products: { with_operator: true }).uniq