문제

이것은 내 코드입니다.

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 Auto는 협회를 저장합니다 save 사용자 모델이 새로운 경우에만.
  2. 아마도 협회의 이름을 더 명백한 것으로 바꿔야 할 것입니다. 예 : friend_users 등.

다른 팁

노력하다: Railscasts- 자기 참조 협회. 일반적으로 나열된 모든 주제에 대한 훌륭한 자습서가 있습니다.

친구 모델의 SOLES_TO : 사용자를 삭제해야한다고 생각합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top