استخدم ActivereCord لإيجاد نتيجة 5 طاولات متداخلة
-
25-09-2019 - |
سؤال
لدي نموذج مستخدم (: الاسم ،: كلمة المرور ،: البريد الإلكتروني) ، ونموذج الحدث (: الاسم ،: إلخ) ونموذج الفائدة (: الاسم)
ثم قمت بإنشاء اثنين من الجداول -> userInterests و eventsInterests ؛ لا يحتوي كل منهما على مفتاح أساسي ويتألف فقط من user_id/presount_id و event_id/presount_id على التوالي.
أحاول استخدام ActivereCord للاستعلام عن قائمة بجميع الأحداث التي يكون فيها الاهتمام.
أنا أستخدم HAS_MANY و MONDS_TO العلاقات مع مكون الإضافي حلقة متداخلة
نماذج بلدي تبدو so =>
user.rb
has_many :users_interests
has_many :interests, :through => :users_interests
event.rb
has_many :events_interests
has_many :interests, :through => :events_interests
الفائدة
belongs_to :users , :through => :users_interests
belongs_to :events , :through => :events_interests
users_interests.rb
belongs_to :users
belongs_to :interests
events_interests.rb
belongs_to :interests
belongs_to :events
إذا كان @user = user.find (1) ، كيف يمكنني الاستعلام عن الأحداث التي يرغب المستخدم في مهتم بها؟
لقد توصلت إلى هذا => @events.find (: all ،: ظروف => eventsInterests.Interest_id = useriNtInterests.Interest_id) ؟؟
لكني أحصل على الخطأ
undefined method `interest_id' for UsersInterests(user_id: integer, interest_id: integer):Class
أم .. wtf؟ أي مساعدة يا رفاق .... لقد كنت في هذا لمدة 4 أيام مثل
المحلول
أولاً ، قفز إلى وحدة التحكم وتأكد من أن جميع علاقاتك تعمل:
User.first.events
User.first.interests
Events.first.users
Interests.first.users
Interests.first.events
# ... and so
فقط للتوضيح ، يسرد المستخدم اهتماماته ، وتريد الحصول على قائمة بالأحداث التي تطابق هذه الاهتمامات؟
User.first.interests.collect { |interest| interest.events }.uniq
ليست فعالة خاصة ، ولكنها فعالة وسهلة الفهم.
يمكنك استخدام User.first.interests_singular_ids
للحصول على الهوية وتمرير ذلك إلى اكتشاف () interest_id IN(...)
تلك القائمة أيضًا. لست متأكدًا من مدى أسرع ، رغم ذلك.