【问题标题】:Rails: Query nil has_one associationRails:查询 nil has_one 关联
【发布时间】:2017-07-11 19:01:04
【问题描述】:

我有两个模型:Patient 和 CodeStatus。

CodeStatus belongs_to Patient 和 Patient has_one CodeStatus

我正在尝试查询 patient.code_status 为 nil 的所有患者。我惊讶地发现Patient.where(code_status: nil) 不能扔:column patients.patient_id does not exist

我已经找到this (fairly old) answer,但我很难相信查询它的最佳方法是通过一长串原始 SQL。我认为 rails 会像许多其他协会一样包含这个助手。有谁知道一个不那么冗长的解决方案?提前致谢。

【问题讨论】:

  • 几个问题:1)Patient.primary_key和CodeStatus.primary_key的输出是什么? 2) 为什么查询要从 patients.patient_id 列开始?默认情况下,它应该期望主键是patients.id... 3)您可以将整个 has_one/belongs_to 行添加到您的问题中吗?您是否将任何选项传递给这些方法? 4) 你可以为这两个表添加 db/schema 吗?
  • where(column: nil) 受支持并使用 postgres 生成 WHERE "table"."column_name" IS NULL。您可能弄乱了关联定义。如果CodeStatus 属于Patient,则CodeStatus 必须有一个patient_id 列。

标签: sql ruby-on-rails ruby ruby-on-rails-4.2 ruby-2.3


【解决方案1】:

问题是,

patient.code_status

不是列,而是方法,你说的时候Rails添加的

class Patient
  has_one :code_status
end

以下是获取与任何代码状态无关的所有患者的方法:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多