0

クラスで宣言することにより、外部キーをマッピングしています。
しかし、レールは自動割り当てされた外部キーを呼び出し、エラーをスローしています。

where句クラス宣言の不明な列は
以下に示されています。

class Supplier < ActiveRecord::Base  
  has_one :criteria  
  self.primary_key = 'sup_id'  
end  

class Criteria < ActiveRecord::Base  
  belongs_to :supplier, :foreign_key => "crt_sup_id"  
  self.primary_key = 'crt_id'  
  self.table_name = 'criterias'  
end  

クラス Criteria で self.supplier を使用している場合、正常に動作しています

しかし、クラス Supplier で self.criteria を使用している場合、次のようにエラーがスローされます。

「where 句」の不明な列「criterias.supplier_id」: SELECT criterias.* FROM criterias WHERE criteriassupplier_id

基準にsupplier_idという名前のフィールドがありません。代わりに、クラスで定義されているcrt_sup_idを使用しています。

4

1 に答える 1

0

has_oneリレーションでも外部キーを参照する必要があります。

class Supplier < ActiveRecord::Base  
  has_one :criteria, foreign_key: "crt_sup_id"   
  self.primary_key = 'sup_id'  
end  

その理由は、デフォルトでは関連付けが Rails で一方向であるためです。詳細については、レール ガイドを参照してください。

于 2013-04-24T11:23:49.117 に答える