在rails中的一个查询中获取对象的对象

时间:2015-08-20 14:42:59

标签: ruby-on-rails postgresql

在我的基于Postgresql的Rails应用程序中,我试图限制我的Web应用程序中的数据库查询和一般迭代,我正在寻找一种方法在一个查询中执行此操作。

关联: - 产品has_and_belongs_to_many类别

我想要做的是找到与所有类别相关的所有产品,而这些产品又包含在我的主要产品中。例如。我有

@blue_car
@blue_car.categories #=> "blue, car"
Category.find(blue).products #=> "Blue car, Blue boat"
Category.find(car).products #=> "Blue car, Green car"

所以我想从@blue_car得到的结果是“蓝色车,蓝色船,蓝色车,绿色车”。

我今天做了一次迭代:

product_list = []
Product.categories.each do |product|
product_list << product.categories
end

相反,我想在一个查询中解决这个问题,应该可以使用正确的连接类型,对吧?

像这样(不起作用):product_list = @blue_car.categories.products

我不知道它是否使它复杂但我做了一些过滤,所以最终的查询必须更像

product_list = @blue_car.categories.where(:category_foo => "bar").products.where(:product_stuff => "things")

任何优雅的建议?

2 个答案:

答案 0 :(得分:1)

根据你所说的,这样的东西应该有效。

[13, 14]

答案 1 :(得分:1)

您可以尝试以下方法吗?

Product.includes(:categories).where(categories: { name: @blur_car.categories } )