0

次の関連付けを設定する方法:

class Midatum < ActiveRecord::Base
 # ..., diagn1, diagn2, diagn3
 # sample data:
 #  ..., "0123", nil   ,"0124"
 #  ..., "0123", nil   ,"0124"
 #  ..., "0123", "1123", nil  
 belongs_to :icd9, :foreing_key => :diagn1
 belongs_to :icd9, :foreing_key => :diagn2
 belongs_to :icd9, :foreing_key => :diagn3
end

class icd9 < ActiveRecord::Base
 # icd9, description 
 # sample data:(unique)
 #"0123", "some text"
 #"0124", "some other text"
 #"1123", "description text"
 #"1133", "description text"
 has_many :midata, :foreing_key => :icd9, :primary_key => :icd9
end

これは動作しません。誰かにとっては明らかかもしれませんが、私にとってはそうではありません。データベースはレガシー DB であり、読み取り専用です。データを操作できるようにするには、この関連付けを確立する必要があります。

4

1 に答える 1

0

この回答は Rails の専門家からのもので、私の問題を解決してくれます。他の誰かが同じ問題を抱えている場合に備えて投稿しています。

belongs_to :icd9_a, :foreign_key => :diagn1, :class_name => "Icd9"
belongs_to :icd9_b, :foreign_key => :diagn2, :class_name => "Icd9"
belongs_to :icd9_c, :foreign_key => :diagn3, :class_name => "Icd9"

ただし、これは、3 つのメソッドすべてを使用して関連付けを照会する必要があることを意味します。 m = Midatum.first m.icd9_a m.icd9_b m.icd9_c

同様に、 Icd9 クラスでは、一意の名前を持つ 3 つの個別の関連付けが必要になります。

class Icd9 < ActiveRecord::Base
 self.primary_key = :icd9

 has_many :midata_a, :foreign_key => :diagn1, :class_name => "Midatum"
 has_many :midata_b, :foreign_key => :diagn2, :class_name => "Midatum"
 has_many :midata_c, :foreign_key => :diagn3, :class_name => "Midatum"

end

icd9 テーブルには「id」列がなく、「icd9」列を主キーとして使用するため、私が行ったように設定する必要があることにも注意してください。

 self.primary_key = :icd9
于 2013-09-10T17:51:45.770 に答える