Ruby on rails Rails ActiveRecord连接混淆

Ruby on rails Rails ActiveRecord连接混淆,ruby-on-rails,activerecord,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.reco

在控制台中,此代码:

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.notes的记录相同。很明显,我在这里遗漏了一些东西……有什么想法吗?

这是因为rails在默认情况下是内部连接的。您的患者
1
既没有
笔记
也没有
记录

如果你可以做一个左连接

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

这是因为rails在默认情况下是内部连接的。您的患者
1
既没有
笔记
也没有
记录

如果你可以做一个左连接

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

这是因为rails在默认情况下是内部连接的。您的患者
1
既没有
笔记
也没有
记录

如果你可以做一个左连接

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

这是因为rails在默认情况下是内部连接的。您的患者
1
既没有
笔记
也没有
记录

如果你可以做一个左连接

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

您可能对include类型功能感兴趣(用于即时加载)。请参阅:

您可能对包含类型功能感兴趣(用于快速加载)。请参阅:

您可能对包含类型功能感兴趣(用于快速加载)。请参阅:

您可能对包含类型功能感兴趣(用于快速加载)。请参阅:

将查找(1)更改为第一个
?当id不存在时,是否有方法使其返回空关联而不是抛出错误?更好的解决方案是耐心。包括(:注释,:录制)。查找(1)更改查找(1)首先执行
?当id不存在时,是否有方法使其返回空关联而不是抛出错误?更好的解决方案是耐心。包括(:注释,:录制)。查找(1)更改查找(1)首先执行
?当id不存在时,是否有方法使其返回空关联而不是抛出错误?更好的解决方案是耐心。包括(:注释,:录制)。查找(1)更改查找(1)首先执行
?当id不存在时,是否有方法使其返回空关联而不是抛出错误?更好的解决方案是耐心。包括(:注释,:录制)。查找(1)