المستخدم has_many: المستخدمين،: من خلال =>: الأصدقاء - كيف؟

StackOverflow https://stackoverflow.com/questions/2404246

سؤال

هذا هو رمزي:

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 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. القضبان السيارات تنقذ الجمعيات. تحتاج إلى الاتصال save فقط إذا كان نموذج المستخدم جديدا.
  2. ربما يجب عليك إعادة تسمية الارتباط إلى شيء أكثر صراحة. على سبيل المثال: friend_users إلخ.

نصائح أخرى

يحاول: Railscasts - الجمعيات المرجانية ذاتية. وبعد عموما لديه دروس جيدة جدا على جميع الموضوعات المدرجة.

أعتقد أنك بحاجة إلى حذف ينتمي: المستخدم في نموذج صديقك

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top