0

我有这个按预期工作的查询:

@dog.listings.joins(:address_country).merge(Country.where(permalink: 'uk'))

此查询为我提供了国家与“英国”匹配的列表(列表 has_one :address_country,这是 Country 模型中的国家)

但是,当我在 cat 和列表(垃圾)之间的链中添加另一个关联时,它不起作用(垃圾属于列表,也属于猫):

@dog.litters.joins(:listing) & Listing.joins(:address_country) & Country.where(permalink: 'uk')

在此查询中,我希望它获取国家(相关列表的)匹配的 Litters。但它只返回一个空数组。第一个查询有效,我想我只需要将它固定到@cat.litters?)

在 Rails C 中,我得到了这个:

 d.litters.joins(:listing) & Listing.joins(:address_country).merge(Country.where(permalink: 'uk'))

  Litter Load (0.6ms)  SELECT "litters".* FROM "litters" INNER JOIN "listings" ON "listings"."id" = "litters"."listing_id" WHERE "litters"."litterable_id" = 11 AND "litters"."litterable_type" = 'Dog'
  Listing Load (0.4ms)  SELECT "listings".* FROM "listings" INNER JOIN "countries" ON "countries"."id" = "listings"."address_country_id" WHERE "countries"."permalink" = 'uk'
=> []

任何想法我做错了什么?

4

1 回答 1

1

绝对错误的一件事是假设它&merge. 它曾经是但在fbd917中被删除- 现在它只是ruby​​ 的数组交集,这不是你想要的。

我不确定我是否遵循您提供的简要描述中的数据库架构,但只需将其重写为合并就值得一试:

@dog.litters.joins(:listing).merge(Listing.joins(:address_country)).merge(Country.where(permalink: 'uk'))

再次没有实际运行代码,我猜这是等效的:

@dog.litters.joins(listing: :address_country).where(countries: {permalink: "uk"})
于 2013-01-15T18:04:42.163 回答