2010年10月1日金曜日

ID以外の項目でテーブルのリレーションを行う



環境:2.3.8


前回、id以外の項目をprimaryにし、関連を設定する方法、という記事を書きましたが、仕様をミスっていたので改めて書きますします。





AテーブルからBテーブルに接続したいとき、通常railsでは、「id」というデフォルトの項目を使いますが、別の項目で接続したいときの方法です。


[Acceptテーブル] (1対多) [Patientテーブル] という関連で、patient_noで接続します。


あらかじめ、両テーブルに項目patient_noは追加されているものとします。



class Accept < ActiveRecord::Base
# Patientテーブルへ、patient_noをキーにリレーションを設定する
belongs_to :patient, :class_name => 'Patient', :primary_key => 'patient_no', :foreign_key => 'patient_no'
end


また、AcceptsControllerを見直し、下記のようなfindがあれば修正する。


(環境により適宜になります)



@patient = Patient.find(@accept.id)
        ↓
@patient = Patient.find(:first, :conditions => ["patient_no = ?", @accept.patient_no])





んー、わかれば簡単なんだけど、最初はなかなか難しいです(^^;






0 件のコメント:

コメントを投稿