你可以做到这一点是:
@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