2016-03-01 52 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

好東西!你可以鏈接到任何有價值的信息,而在左邊的加入? –