القضبان: متعددة "has_many من خلال" لنماذج نفس النموذجين؟

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

  •  23-09-2019
  •  | 
  •  

سؤال

لا أستطيع لف رأسي حول هذا ...

class User < ActiveRecord::Base
  has_many :fantasies, :through => :fantasizings
  has_many :fantasizings, :dependent => :destroy
end

class Fantasy < ActiveRecord::Base
  has_many :users, :through => :fantasizings
  has_many :fantasizings, :dependent => :destroy
end

class Fantasizing < ActiveRecord::Base
  belongs_to :user
  belongs_to :fantasy
end

... الذي يعمل بشكل جيد لعلاقتي الأساسية ، في ذلك أ User يستطيع لديك عديدة Fantasies, ، وهذا أ Fantasy يستطيع ينتمي ل كثير جدا Users.

ومع ذلك ، أحتاج إلى إضافة علاقة أخرى الإعجاب (كما في ، أ User "يحب" أ Fantasy بدلاً من "لديه" ... فكر في Facebook وكيف يمكنك "مثل" A Wall-Post ، على الرغم من أنه لا "ينتمي" لك ... في الواقع ، فإن مثال Facebook هو ما أنا عليه بالضبط ما أنا عليه " م تهدف).

لقد جمعت أنني يجب أن أقوم بإنشاء ارتباط آخر ، لكنني مرتبك نوعًا ما حول كيفية استخدامه ، أو إذا كان هذا هو النهج الصحيح. بدأت بإضافة ما يلي:

class Fantasy < ActiveRecord::Base

  ...

  has_many :users, :through => :approvals
  has_many :approvals, :dependent => :destroy
end

class User < ActiveRecord::Base

  ...

  has_many :fantasies, :through => :approvals
  has_many :approvals, :dependent => :destroy
end

class Approval < ActiveRecord::Base
  belongs_to :user
  belongs_to :fantasy
end

... ولكن كيف أقوم بإنشاء الجمعية من خلال Approval بدلا من من خلال Fantasizing?

إذا كان بإمكان شخص ما أن يضعني في هذا الأمر ، فسأكون ملزماً كثيرًا!

هل كانت مفيدة؟

المحلول

احتفظ بمجموعة الرمز الأول ، ثم في نموذج المستخدم الخاص بك: أضف:

has_many :approved_fantasies, :through => :fantasizings, :source => :fantasy, :conditions => "fantasizings.is_approved = 1"

في جدول التخيل الخاص بك ، أضف حقل منطقي IS_APBOST.

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