Rails ActiveRecord加入混乱

时间:2014-02-06 21:12:26

标签: ruby-on-rails activerecord

在控制台中输入此代码:

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相同的注释。很明显我在这里遗漏了什么...有什么想法吗?

2 个答案:

答案 0 :(得分:2)

那是因为默认情况下rails会INNER JOIN。您的患者1没有notesrecordings

如果可以进行左连接。

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