我在数据模型中添加了另一层复杂性。先前: 一个国家有许多商店,而这些商店又拥有许多产品。
我现在介绍城市,以便: 一个国家有许多城市,有许多商店,有许多产品。
我使用的数据包含可能没有产品的商店,可能没有商店的城市(尚未拥有商店)和可能没有城市的国家(尚未)。
我想查询所有可以查找产品的国家/地区。 (即所以我可以填写所有国家/地区的目标网页,以便用户查找内容。)
以前(使用Country> Store> Product),我使用了它,并且效果很好:
Country.joins(:stores => :products).group("countries.id").having("count(products.id)>0")
但我无法理解这个额外的图层(国家>城市>商店>产品)。例如,这不起作用:
Country.joins(:cities => :stores).joins(:stores => :products).group("countries.id").having("count(products.id)>0")
...产生这个错误:
ActiveRecord::ConfigurationError: Association named 'stores' was not found on Country
有人可以帮忙吗?
(我试图尽可能地与SQL无关,所以如果可以用ActiveRecord方法完成,我想这样做。)
答案 0 :(得分:2)
Country.joins(cities: [stores: :products])
.group('countries.id')
.having('count(products.id) > 0')
由于joins
性质having
条款是多余的:
Country.joins(cities: { stores: :products }).uniq