2012-03-06 3 views
0

車にバンドルできるアイテムがある場合は問題があります。例えばAR関係モデルで2つの異なる外部キーを使用することが可能

:それは最後になりますように

class Item < ActiveRecord::Base 
    has_many :object_connections, :foreign_key => 'engine_id' 
    has_many :object_connections, :foreign_key => 'chassis_id' 

に見えます。いずれかを指定する方法はありますか?また、:is_engine => trueのような条件を追加することは可能ですか?これは採用されたプロジェクトであり、これを機能させることを試みるだけです。私はあなたが:class_nameオプションでhas_one associationを探しているのだと思い

THX

+0

モデルでアソシエーション名( 'has_many'の後ろの最初の引数)を1回だけ使用できます。あなたのモデルについてもっと教えていただけますか? ObjectConnectionにはどのような関連付けがありますか?エンジンとシャシーのモデルもありますか? –

+0

基本的に、アイテムがあり、 'item'で構成されるobject_connectionがあります。アイテムは、エンジンまたはシャーシとして内部的に管理されます。この部分は、スキーマの中で最も厄介な部分です。私は本当にクエリでそれを行うので、私はちょうどこのカスタムを行う必要があると思う。条件のように多くの助けではない他のテーブルを照会するように見えます。 – timpone

+0

内部管理はどのように行われますか?他の3つのモデルの関連コードと関連するデータベースフィールドを表示できますか? –

答えて

0

class Item < ActiveRecord::Base 
    has_one :engine, :foreign_key => 'engine_id', :class_name => 'ObjectConnection' 
    has_one :chassis, :foreign_key => 'chassis_id', :class_name => 'ObjectConnection' 
end 

団体が一意の名前を付ける必要があり、通常のActiveRecordは、関連付けに基づい:class_nameを把握することができます。しかし、あなたは同じ場所を指し示す2つのものを持っていますので、すべて手で配線しなければなりません。

関連する問題