Rails .joins查询多个关联



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

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

这个查询给出了国家与'uk'匹配的清单(清单has_one:address_country,它是来自country模型的国家)

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

@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'
=> []

你知道我做错了什么吗?

假设&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"})

相关内容

  • 没有找到相关文章

最新更新