Sql 避免ActiveRecord中联接中的记录匹配

Sql 避免ActiveRecord中联接中的记录匹配,sql,postgresql,ruby-on-rails-4,activerecord,Sql,Postgresql,Ruby On Rails 4,Activerecord,我有一辆汽车,工厂,还有一个公司车型 class Car belongs_to :maker, polymorphic: true end class Factory has_many :cars, as: :maker belongs_to :company # has a location column end class Company has_many :cars, as: :maker has_many :factories end 汽车有一个maker\u i

我有一辆
汽车
工厂
,还有一个
公司
车型

class Car
 belongs_to :maker, polymorphic: true
end

class Factory
 has_many :cars, as: :maker
 belongs_to :company

 # has a location column
end

class Company
  has_many :cars, as: :maker
  has_many :factories
end
汽车有一个
maker\u id
列和一个
maker\u type
来识别其
工厂或
公司

只有工厂才有位置

我想得到所有在特定地点生产的汽车

由于有些汽车是由公司生产的,我需要知道他们有哪些工厂

举个例子

法拉利有几家工厂。法拉利旗下的任何一家工厂都可以制造汽车 法拉利汽车。当地的赛车队可以从附近的商店订购一辆定制的汽车 工厂它可能是法拉利旗下的一家工厂,但这辆车仍在使用中 由工厂制造,而非法拉利

所以,因为只有工厂有一个位置,所以所有东西都需要在它们周围。 我需要把工厂弄到一个地方,然后拿到他们的车或公司的车

Car.joins("LEFT OUTER JOIN factories on cars.maker_id = factories.id AND cars.maker_type = 'Factory'")
    .joins("LEFT OUTER JOIN companies ON cars.maker_id = companies.id AND cars.maker_type = 'Company'")
    .merge(Factory.near("Berlin"))
这不太管用,因为我没有得到任何结果,我猜是因为工厂与公司匹配,而不是一个单独的表格


如何修复查询,使公司和工厂之间不匹配?(我不想将其拆分为几个查询,因为我正在对其进行分页、订购等)

为什么公司会参与此查询?难道不是选择所有在柏林附近有工厂的汽车吗
Car.joins(“factory_string”)。where(“factory.location NEAR‘berlin’”)
汽车可能与工厂没有直接关系,因为它们的制造商是公司,但在您的模型中,您将其描述为与工厂有直接关系?我是这样说的,因为多态性,但有些汽车制造商是有工厂的公司。因此,这不仅仅与工厂有直接关系。你为什么选择这种数据建模方法?在我看来,所有的汽车都是在一个工厂里制造的,一个公司可以有很多工厂,这更符合逻辑?那么你的问题就不是问题了?