2014-02-26 83 views
0

我有PartnerType模型,它屬於PartnerType,它繼承了多態Lookup模型。Rails 4:Model.joins(...)不選擇空關係

在我的#index頁面上,我試圖列出所有合作伙伴,並顯示其關聯的partner_type(如果他們有)。試圖優化到1查詢,我加入了partner_type(通過查找表),但似乎這個查詢只返回具有相關的partner_type的合作伙伴。我確信這是預期的行爲,但我對加入的不足方面知之甚少。

# partners_controller.rb 
def index 
    # Only grabs partners WITH an associated partner_type 
    @partners = Partner.joins(:partner_type).select("partners.*, lookups.value as partner_type_value") 
    end 

如何創建1個查詢,選擇所有合作伙伴和相關的partner_type,如果他們有一個?

編輯

@partners = Partner.includes(:partner_type).select("partners.*, lookups.value as partner_type_vale").references(:partner_type) 

這工作,但我不知道這是否是 '最佳' 的解決方案。

回答

0

@partners = Partner.includes(:partner_type).select("partners.*, lookups.value as partner_type_vale").references(:partner_type)

確實是這個問題的解決方案。它加載關係,如果存在但還返回沒有任何子關係的父對象。

的情況是:

parent has_many childrenchild belongs_to parent

,並要回所有的父母和他們的孩子,即使是那些父母沒有任何子女。

parent(a) has child(john) 
parent(b) has no children 

Parent.includes(:children).references(:children)會返回父母A和B,即使只有A有關聯的孩子。