在控制台中输入此代码:
Patient.joins(:notes,:recordings).find(1)
返回
ActiveRecord::RecordNotFound: Couldn't find Patient with id=1
这是奇怪的,因为在同一个控制台Patient.find(1)
中没有任何问题,并检索id为1的患者的记录。
我的理解是我应该能够做到:
a = Patient.joins(:notes,:recordings).find(1)
a.notes
a.recordings
并且a.notes应该返回与id为1的患者相关的所有注释以及a.recordings相同的注释。很明显我在这里遗漏了什么...有什么想法吗?
答案 0 :(得分:2)
那是因为默认情况下rails会INNER JOIN
。您的患者1
没有notes
或recordings
如果可以进行左连接。
Patient.joins("LEFT JOIN notes on notes.patient_id = patients.id")
.joins("LEFT JOIN recordings on recordings.patient_id = patients.id")
.find(1)
或加载患者,然后加载关联
a = Patient.find(1)
a.notes
a.recordings
答案 1 :(得分:1)
您可能对包含类型功能感兴趣(对于急切加载)。请参阅:Rails :include vs. :joins