我有一个Car
,Factory
和一个Company
模型。
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_id
列和maker_type
,以确定其Factory
或Company
只有工厂有位置
我希望获得所有在特定地点制作的汽车
由于有些汽车是由公司生产的,我需要知道他们拥有哪些工厂。所以举个例子
法拉利有几家工厂。法拉利有的任何工厂都可以制造 法拉利车。当地赛车队可以从附近订购定制车 厂。它可能是法拉利拥有的工厂,但汽车仍然存在 由工厂而不是法拉利制造
所以,既然工厂只有一个地点,那么一切都需要围绕它们。 我需要在一个地方找到工厂,然后拿到他们的汽车或公司的汽车
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"))
这不太合适,因为我没有得到任何结果,我猜是因为工厂与公司相匹配,而不是单独的表
如何修复查询,以便公司和工厂不会相互匹配? (我不想将它分成几个查询,因为我正在对它进行分页,排序等)