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’”)
汽车可能与工厂没有直接关系,因为它们的制造商是公司,但在您的模型中,您将其描述为与工厂有直接关系?我是这样说的,因为多态性,但有些汽车制造商是有工厂的公司。因此,这不仅仅与工厂有直接关系。你为什么选择这种数据建模方法?在我看来,所有的汽车都是在一个工厂里制造的,一个公司可以有很多工厂,这更符合逻辑?那么你的问题就不是问题了?