Question

Ceci est mon code:

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

Quand je commence maintenant l'ajout d'utilisateurs par ...

user.users << user2
user.save

Seul le user_id d'ami est rempli, friend_id est nulle.

Toute aide?

Bien à vous, Joern.

Était-ce utile?

La solution

Vous devez ajouter l'attribut :source à votre association has_many through.

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

Maintenant, les appels suivants fonctionneront.

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

Notes:

  1. Rails auto enregistre le associations.You besoin d'appeler save uniquement si le modèle utilisateur est nouveau.
  2. Vous devriez probablement renommer l'association à quelque chose de plus explicite. Par exemple:. friend_users etc

Autres conseils

Essayez: Railscasts - autoréférentielle Associations . En général, a de très bons tutoriels sur tous les sujets énumérés.

Je pense que vous devez supprimer le belongs_to: l'utilisateur dans votre modèle ami

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top