2016-11-07 15 views
0

我有一個控制器stockdiaries導軌不顯示在其上的關聯值是nil

Ticketline.joins(:ticket, :product => :location) 

ticketline屬於產品和產品屬於位置的行。

Ticketlines表有一列PRODUCT,產品表有一列LOCATION。

產品在LOCATION欄可以有值nil。

如果我在視圖中列出所有票據,則不顯示包含位置爲零的產品的票據。整排。

雖然我預計展示行,也許如果我叫:

ticketline.product.location.try(:NAME) 

只是顯示在該列空值。

如果我從我的控制器中刪除:product =>:location它顯示所有行。

值在數據庫有:

TICKET, LINE, PRODUCT, ATTRIBUTESETINSTANCE_ID, UNITS, PRICE, TAXID, ATTRIBUTES, PRODUCT_COST, PRICESELL, TAXES, SERVICES, SERVICES_RATE, HISTORY_ID 
    'd0d82dbb-f6eb-41b3-a03e-37846e0e011a', 0, '130', '', 1, 850000, '001', '', 350000, 850000, 85000, 0, 0, 0 
    'ec586062-af32-423e-82f7-0de1da9cffdd', 0, '121', '', 1, 1600000, '001', '', 650000, 1600000, 160000, 0, 0, 0 

在這種情況下,有2行,一個包含一個產品,用於該位置是零。該行未顯示。

如何保留連接:產品=>:位置(因爲我需要從每個產品的位置表中獲取數據),同時顯示所有記錄,還有那些產品在LOCATION列上的值爲零的產品?

+0

通常它包含我朋友的所有價值。你能給我一個你的數據樣本嗎?實際上輸出的是什麼以及預期的輸出是什麼? –

+0

您好,我用數據庫中的值更新了答案。現在它只顯示一行,而它應該顯示2. – Catmal

回答

1

joins()功能默認爲INNER JOIN這就是爲什麼它給nil值,你需要做LEFT JOIN而不是。

Ticketline.joins("LEFT JOIN tickets ON ticketlines.ticket_id = tickets.id LEFT JOIN products ON tickelines.product_id = products.id LEFT JOIN locations ON products.location_id = locations.id") 

希望幫助!

+0

感謝您的回答我不知道默認的INNER JOIN,這將對未來有用..非常感謝! – Catmal

1
​​

上面的查詢將INNER JOIN票和LEFT JOIN產品和位置。這將產生所需的結果。