私は固執していますが、私はRoRで正しいレコードを作成してアクティブなレコードを得る方法がわかりません。RubyでRubyで正しいと効率的なコードを書く方法
テーブル間の関係:モデルの
imed_patient has one imed_operator
imed_operator has many imed_operator_contacts
imed_patient has_many imed_operator_conatc through imed_operator
定義:PostgreSQLの
class ImedOperator < ActiveRecord::Base
self.table_name = "imed_operator"
self.primary_key = "code"
has_one :imed_patient, foreign_key: 'r_opr_code'
has_many :imed_operator_contact, :foreign_key => "r_opr_code"
end
class ImedOperatorContact < ActiveRecord::Base
self.table_name = "imed_operator_contact"
end
class ImedPatient < ActiveRecord::Base
self.table_name = "imed_patient"
self.primary_key = "code"
has_many :visit, :foreign_key => "r_ptn_code"
belongs_to :imed_operator , foreign_key: 'r_opr_code'
has_many :imed_operator_contact, through: :imed_operator
end
良いSQL:
select * from imed_patient
INNER JOIN imed_operator ON imed_patient.r_opr_code = imed_operator.code
INNER JOIN imed_operator_contact ON imed_operator.code = imed_operator_contact.r_opr_code
where (imed_operator_contact.r_ct_id = 1 or imed_operator_contact.r_ct_id = 2) and imed_operator_contact.value = '501'
コードは今(働いていない)である。
@pacjenci = ImedPatient.ImedOperatorContact.where('imed_operator_contact.r_ct_id = ? or imed_operator_contact.r_ct_id = ? and imed_operator_contact.value = ?',1,2,'+48501')
実行中
エラー:PacjenciController#1 szukajpacjenttel未定義のメソッド ` ImedOperatorContact」で
NoMethodError#
のために誰もが私を助けることができますか?
はインスピレーションのための
みんなありがとうを解決しました。私は12.1.3.2がネストされた団体に参加hereポイントからの情報を使用
@pacjenci = ImedPatient.joins(:imed_operator).joins(:imed_operator_contact).where('imed_operator_contact.value' => '+48501', 'imed_operator_contact.r_ct_id' => [1,2])
(マルチレベル)あなたのImedPatientにこれを追加することAndy
これはおそらくあなたにとって役に立ちます。私のSQlステートメントの複雑さが増えたら、私はSQLを直接呼び出す方が好きです。 'http:// api.rubyonrails.org/classes/ActiveRecord/Querying.html'あなたのケースの' ImedPatient.find_by_sql() 'のようなもの – theDrifter