避免在ActiveRecord中的连接中进行记录匹配

时间:2015-03-17 14:23:36

标签: sql postgresql ruby-on-rails-4 activerecord

我有一个CarFactory和一个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,以确定其FactoryCompany

只有工厂有位置

我希望获得所有在特定地点制作的汽车

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

所以举个例子

  

法拉利有几家工厂。法拉利有的任何工厂都可以制造   法拉利车。当地赛车队可以从附近订购定制车   厂。它可能是法拉利拥有的工厂,但汽车仍然存在   由工厂而不是法拉利制造

所以,既然工厂只有一个地点,那么一切都需要围绕它们。 我需要在一个地方找到工厂,然后拿到他们的汽车或公司的汽车

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"))

这不太合适,因为我没有得到任何结果,我猜是因为工厂与公司相匹配,而不是单独的表

如何修复查询,以便公司和工厂不会相互匹配? (我不想将它分成几个查询,因为我正在对它进行分页,排序等)

0 个答案:

没有答案