2011-09-01 17 views
5

私は最近、このアプリケーションをrails 2.2.2から2.3.11に更新しました。アップグレードの前にすべてがうまくいきました。ギフトモデルで自己参照エラーを作成できません

ActiveRecord::HasAndBelongsToManyAssociationForeignKeyNeeded in InstrumentsController#arrow 
Cannot create self referential has_and_belongs_to_many association on 'Trait#traits'. :association_foreign_key cannot be the same as the :foreign_key. 

:アップグレード後、私は次のエラーを取得しています

class Gift < ActiveRecord::Base 
    has_many :delegate_gifts 
    has_many :answers 

    belongs_to :feel_motive, :class_name => "Trait", :foreign_key => "feel_motive_id" 
    belongs_to :see_motive, :class_name => "Trait", :foreign_key => "see_motive_id" 
    belongs_to :incline_motive, :class_name => "Trait", :foreign_key => "incline_motive_id" 

    has_and_belongs_to_many :users 
    has_and_belongs_to_many :best_contributions 

    def traits 
    traits = [] 
    traits << feel_motive unless feel_motive.nil? 
    traits << see_motive unless see_motive.nil? 
    traits << incline_motive unless incline_motive.nil? 
    return traits 
    end 
end 

形質モデルを:なぜ2.3.11生産するために2.2.2からのアップグレードん

class Trait < Field 
    has_and_belongs_to_many :traits 
end 

このエラー?

+0

"自己作成できません"。確かに、誰かが実存主義を少し真剣に受け止めているように聞こえる。 – Layke

+1

質問を編集して、 'Trait'モデルのコードを含めてください。 –

+0

@JohnTopley oops ...特徴モデルが投稿されました。 – Jay

答えて

13

has_and_belongs_to_many(少なくとも簡単な方法ではない)それ自身を指すことはできません。そのため、「自己参照」エラーが発生します。あなたは本当にこの再発の関連付けを必要とするなら、あなたはこのような何か書く必要があります:

class User < ActiveRecord::Base 
    has_and_belongs_to_many :friends, 
    :class_name => "User", 
    :association_foreign_key => "friend_id", 
    :join_table => "friends_users" 
end 

をあなたはユーザーテーブルに追加フィールドfriend_idを必要とし、新しいフィールドを持つテーブルのfriends_usersに参加:user_idfriend_id

注:詳細あなたがそこに見つけることができる情報:http://railsforum.com/viewtopic.php?id=4237