質問

これは私のコードです:

class Friend < ActiveRecord::Base
  belongs_to :user
  belongs_to :friend, :class_name => "User", :foreign_key => "friend_id"
end

class User < ActiveRecord::Base
  #...
  has_many :friends
  has_many :users, :through => :friends
  #...
end

ここでユーザーを追加し始めると...

user.users << user2
user.save

友人の user_id のみが入力され、friend_id は null です。

何か助けはありますか?

あなた、ジョーン。

役に立ちましたか?

解決

を追加する必要があります :source あなたに帰属します has_many through 協会。

class User < ActiveRecord::Base
 has_many :friends
 has_many :users, :source => :friend, :through => :friends
end

これで、次の呼び出しが機能するようになります。

u1.users << u2    
u.friends.last
# will print #<Friend id: 1, user_id: 1, friend_id: 4>

ノート:

  1. Rails は関連付けを自動保存します。呼び出す必要があります。 save ユーザーモデルが新しい場合のみ。
  2. おそらく、関連付けの名前をより明示的な名前に変更する必要があります。例えば: friend_users

他のヒント

試してみてください: Railscasts - 自己参照協会に。一般的に記載されているすべてのトピックについての非常に良いチュートリアルを持っています。

私はあなたがbelongs_toのを削除する必要があると思う:あなたの友人のモデルでは、ユーザー

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top