2017-02-21 9 views
1

私は2つのモデル:PatientCodeStatusを持っています。Rails:クエリnil has_one関連

CodeStatus belongs_to患者、および患者has_one CodeStatus

私はpatient.code_statusがnilであるすべての患者を照会しようとしています。私はPatient.where(code_status: nil)が投げる動作しないことを見つけるために驚いた:column patients.patient_id does not exist

私はすでにthis (fairly old) answerを発見したが、私はそれが難しいこれを照会するための最良の方法は、生のSQLの長い文字列を介していることを信じることを見つけます。私は、他の多くの団体と同じように、このヘルパーがレールに含まれると思います。誰かがそれほど冗長ではない解決法を知っていますか?前もって感謝します。

patient.code_status 

が列ではありませんが、この方法は、あなたが

ここ
class Patient 
    has_one :code_status 
end 

はあなたが関連付けられていないすべての患者を取得したい方法であると言うのRailsで追加されたことを

+0

カップルの質問:1) 'Patient.primary_key'と' CodeStatus.primary_key'の出力はどうですか? 2)なぜ、クエリはpatients.patient_id列を探していますか?デフォルトでは、主キーが 'patients.id'となるはずです... 3)has_one/belongs_to行全体をあなたの質問に追加できますか?これらのメソッドにオプションを渡していますか? 4)これら2つのテーブルに対してdb/schemaを追加できますか? – Glyoko

+1

'where(column:nil)'がサポートされ、 'WHERE"テーブル "。"が生成されます。アソシエーションの定義が崩れている可能性があります。 'CodeStatus'が' Patient'に属している場合、 'CodeStatus'は' patient_id'カラムを持たなければなりません。 – nicooga

答えて

3

問題があり、任意のコードステータス:

Patient.includes(:code_status).where(code_statuses: { id: nil }) 
関連する問題