2012-01-24 11 views
3

私が持っているコードを継承しています:ror - has_manyとbelongs_toの両端に外部キーを含める?

class Graphic < ActiveRecord::Base 
    has_many :comments, :foreign_key => 'asset_id', 
    :conditions => 'asset_type_id = 5', 
    :order => 'created_at', :dependent => :destroy 

class Comment < ActiveRecord::Base 
    belongs_to :graphic, :foreign_key => :asset_id 

has_manyのは(それは私は信じてOK belongs_toの中で参照されます)が、私はわからないFOREIGN_KEYを持つべきではないように私には思えるが、あなたは知っていますか?

すなわちそれは:foreign_keyが実際ActiveRecord documentationにこの記述がオプションで、レールのためのhas_many声明で

class Graphic < ActiveRecord::Base 
    has_many :comments, 
    :conditions => 'asset_type_id = 5', 
    :order => 'created_at', :dependent => :destroy 

class Comment < ActiveRecord::Base 
    belongs_to :graphic, :foreign_key => :asset_id 

答えて

3
:この場合

class Comment < ActiveRecord::Base 
    belongs_to :graphic, :foreign_key => :graphic_id 

あなたは、単にこれにbelongs_to文を簡素化することができ

私はあなたが既にRailsでベーキングされていることをしようとしていると思います。ここで多態性結合を使用する必要があります。

class Comment 
    belongs_to :asset, :polymorphic => true 
end 

class Graphic 
    has_many :comments, :as => :assets 
end 

このように、どちらの側にもforeign_keyを宣言する必要があります。

+0

それも本当です...私はちょうど彼の質問に答えようとしていた。 – Batkins

3

次のようになります。

アソシエーションに使用する外部キーを指定します。デフォルトでは、このクラスの名前は小文字で、 "_id"は接尾辞付きであると推測されます。ですから、has_manyの関連付けを行うPersonクラスは、デフォルトでは "person_id"を使用します:foreign_key。

あなたはそれがクラスの名前と異なっているので、あなたのhas_many声明にforeign_key属性が必要なのですかのようにだからあなたの場合には、それが見えます。

ステートメントでは、foreign_key宣言は必要ありません。

アソシエーションに使用する外部キーを指定します。ここではthe ActiveRecord documentationbelongs_to関係について:foreign_keyオプションの説明があります。デフォルトでは、これは "_id"接尾辞を持つ関連の名前であると推測されます。したがって、belongs_to:personアソシエーションを定義するクラスは、デフォルト:foreign_keyとして "person_id"を使用します。同様に、belongs_to:favorite_person、:class_name => "Person"は "favorite_person_id"の外部キーを使用します。

私は、あなたが本当にあなたのCommentクラスに記述することを意図することは、このであることを仮定している:

belongs_to :graphic 
+0

私は彼が本当にasset_idを意味していると思います。これはグラフィックである場合とそうでない場合があります。 –

+0

2つの引用符も似ています。私は ':foreign_key'が' has_many'のモデルでオーバーライドされている理由を知りません。実際にはテーブルのforeign-keyを持つ 'belongs_to'を持つモデルです。 – mmcrae

関連する問題