القضبان: متعددة "has_many من خلال" لنماذج نفس النموذجين؟
-
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.