2017-02-21 120 views
1

我有两个模型:PatientCodeStatusRails:查询零has_one关联

CodeStatus belongs_to患者,和患者has_one CodeStatus

我想查询所有的患者,其中patient.code_status为零。我很惊讶地发现,Patient.where(code_status: nil)不起作用抛出:column patients.patient_id does not exist

我已经找到this (fairly old) answer,但我觉得很难相信,查询这个最好的方法是通过原始SQL长长的一串。我认为铁轨会包括这个帮手,就像他们为许多其他协会一样。有谁知道一个不太详细的解决方案吗?提前致谢。

+0

几个问题:1)'Patient.primary_key'和'CodeStatus.primary_key'的输出是什么? 2)为什么查询以patient.patient_id列开头?默认情况下,它应该期望主键为'patient.id' ... 3)你可以将整个has_one/belongs_to行添加到你的问题中吗?你是否将任何选项传递给这些方法? 4)你可以为这两个表添加db/schema吗? – Glyoko

+1

'支持where(column:nil)',并用postgres生成'WHERE“表。”“column_name”IS NULL'。你可能搞砸了关联定义。如果'CodeStatus'属于'Patient','CodeStatus'必须有'patient_id'列。 – nicooga

回答

3

的问题是,

patient.code_status 

不是列,但在方法,通过当你说

class Patient 
    has_one :code_status 
end 

这里是你如何让不相关联的所有患者的Rails添加任何代码状态:

Patient.includes(:code_status).where(code_statuses: { id: nil })