Rails + SQL:没有连接时包含连接表

时间:2016-03-01 17:53:12

标签: mysql ruby-on-rails ruby-on-rails-4 arel

我有一个模型,Service,可选择属于Region。我正在尝试编写一个关于Service的查询,这使我能够按区域标题和服务标题查询服务。

我已设法使用以下查询:

 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。
  4. 如何实现包含具有关联的记录和不具有关联的记录的查询。

    谢谢

1 个答案:

答案 0 :(得分:2)

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

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