2009-05-13 8 views

答えて

2

両方に:foreign_keyオプションを設定する必要があります。

は、次の2つのモデルを検討:

class Article < ActiveRecord::Base 
    has_many :comments, :foreign_key => "articleID" 
end 

class Comment < ActiveRecord::Base 
    belongs_to :article, :foreign_key => "articleID" 
end 

has_manyを宣言Articleクラスをあなたがすることができます:

Article.find(12).comments # Finds all comments with comment.articleID == 12 

Commentモデルでbelongs_toメソッドの呼び出しがすることができます:

Comment.last.article  # Finds article with article.id == comment.articleID 

どちらの場合も、外部キーが使用されています。いずれかの場所で省略すると、その特定の関連プロキシは正しく動作しません。

+0

*常に*両方に ':foreign_key'オプションを設定する必要はありません。特定の例では、レガシーの列名があるため、そうします。しかし、この問題はアソシエーション名を 'belongs_to:default_account、:class_name =>" Account "、:foreign_key =>" account_id "'のように変更した場合に大きくなります。 Accountクラスの対応する 'has_one'は、外部キーを指定する必要はありません。 –

2

belongs_toは、外部キーが関連付け名_idと推測します。

has_oneは、外部キーが包含クラスの名前+ _idであると推測します。

通常、非標準のキーの場合は、1か所で必要です。

関連する問題