2

これは私のコードです:

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 です。

何か助けはありますか?

あなたの、ジョーン。

4

3 に答える 3

2

試してみてください: Railscasts - Self-Referential Associations。一般的に、リストされているすべてのトピックに関する非常に優れたチュートリアルがあります。

于 2010-03-08T21:59:15.570 に答える
1

: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など
于 2010-03-08T20:52:37.353 に答える
1

Friend モデルの属している :user を削除する必要があると思います

于 2010-03-08T20:59:36.057 に答える