我有两种型号的产品和类别。
我可以像Category.products等那样成功地进行查询。
Product.rb
belongs_to :category
Category.rb
has_many :products
现在我想只检索那些至少有一个现有产品的类别。
我试过这样:
@categories = Category.where(Category.products.present?)
#return error undefined方法`产品'也改为产品不起作用。
答案 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"使用joins
和merge
:
@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