你可以做到這一點是:
@sales = Sale.includes(:customer => :user).all
它會得到所有與他們的客戶和型材銷售記錄嵌套到他們,你可以在Sale
的物體上使用它:
@sales.first.customer.user.email #get the email for first Sale record.
雖然,我認爲這將是一個代價高昂的會面hod,因爲我可以看到總共會有3個SQL查詢來獲取所有記錄,其中2個使用的是IN()
,我認爲這有很大的代價。所以在這種情況下,我們最好用左連接。
@sales = Sale.joins('LEFT JOIN users ON sales.customer_id = users.profile_id AND users.profile_type = "Customer"')
此查詢將獲得所有帶有嵌套用戶配置文件而沒有客戶數據/記錄的銷售記錄。如果您需要的客戶數據量太大,你可以隨時去與此:
@sales = Sale.joins('LEFT JOIN customers ON sales.customer_id = customers.id LEFT JOIN users ON customers.id = users.profile_id AND users.profile_type = "Customer"')
感謝您的快速反應,但我得到以下錯誤:#<引發ArgumentError:錯誤的參數數目(0 1)>時我嘗試@sales = Sale.includes(:customer =>:user).all – user3575214
@ user3575214哦,你正在使用rails 4.試試'@sales = Sale.includes(:customer =>:user).all.to_a' –
不,同樣的錯誤消息 – user3575214