2016-03-01 51 views
0

我有一个模型Service,它可以选择属于一个Region。我试图在服务上编写一个查询,使我能够按区域标题以及服务标题查询服务。Rails + SQL:当没有连接时包含连接表

我设法与下面的查询做到这一点:

Service.includes(:region).joins(:region).order(Region.arel_table[:title]) 

但是它不包括服务,不属于一个区域。我希望查询也包含那些不属于某个区域的查询。在接下来的询问,我是接近:

Service.where("region_id is null") + Service.includes(:region).joins(:region).order(Region.arel_table[:title]) 

但是......

  1. 这种感觉笨重,可怕的
  2. 我需要它返回一个 的ActiveRecord ::阵列
  3. 奖励:在Arel。

如何实现包含具有关联性和不具有关联性的记录的查询。

谢谢

回答

2

我还没试过这个,但是你可以在连接中指定连接sql。所以可能是这样的:

Service.includes(:region).joins("LEFT JOIN regions on services.region_id = regions.id").order(Region.arel_table[:title]) 
+0

谢谢@doon,虽然有点微调,但工作得很好。多表的名字:Service.includes(:region).joins(“LEFT JOIN regions on services.region_id = regions.id”) –

+0

我在答案中对它们进行了复数形式化处理,这也是我从头上得到的结果 – Doon

+0

好东西!你可以链接到任何有价值的信息,而在左边的加入? –