سؤال

لدي نموذج مستخدم (: الاسم ،: كلمة المرور ،: البريد الإلكتروني) ، ونموذج الحدث (: الاسم ،: إلخ) ونموذج الفائدة (: الاسم)

ثم قمت بإنشاء اثنين من الجداول -> 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(...) تلك القائمة أيضًا. لست متأكدًا من مدى أسرع ، رغم ذلك.

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