المتداخلة لديها الكثير من خلال البرنامج المساعد والناشط المسماة

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

سؤال

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

ثم قمت بإنشاء اثنين من الجداول -> userInterests و eventsInterests ؛ لا يحتوي كل منهما على مفتاح أساسي ويتألف فقط من user_id/presount_id و event_id/presount_id على التوالي. [> الجمع <

نماذج بلدي تستخدم المتداخلة لديها الكثير من خلال البرنامج المساعد

user.rb => has_many :users_interests
 has_many :interests, :through => :users_interests
 has_many :events_interests, :through => :interests
 has_many :events, :through => :events_interests

event.rb => has_many :events_interests
  has_many :interests, :through => :events_interests
     has_many :users_interests, :through => :interests
  has_many :users, :through => :users_interests

interest.rb => has_and_belongs_to_many :users
               has_and_belongs_to_many :events

events_interests.rb => belongs_to :interests
                    belongs_to :events
users_interests.rb => belongs_to :users
                   belongs_to :interests

يا للعجب .. لذلك أردت إنشاء اسم اسمه من هذا القبيل تجد جميع الأحداث التي تشترك في الاهتمام مع مستخدم معين. إليكم بعض الكود ساعدني أحدهم.

named_scope :shares_interest_with_users, lambda {|user|
{ :joins => :users_interests,
  :conditions => {:users_interests => {:user_id => user}}
   }}

عندما أركض من وحدة التحكم =>

@user = User.find(1) 
@events = Event.shares_interest_with_user(@user)

أحصل على الخطأ:

uninitialized constant Event::EventsInterest

هل يمكن لأي شخص أن يرى ما أفسدته؟

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

المحلول

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

تمكنت من حل خطأك مع النماذج التالية.

user.rb

class User < ActiveRecord::Base
has_many :users_interests
  has_many :interests, :through => :users_interests
  has_many :events_interests, :through => :interests
  has_many :events, :through => :events_interests
end

users_interest.rb

class UsersInterest < ActiveRecord::Base
  belongs_to :user
  belongs_to :interest
end

الفائدة

class Interest < ActiveRecord::Base 
  has_many :users,:through => :users_interests
  has_many :users_interests
  has_many :events_interests
  has_many :events, :through => :events_interests
end

** events_interest.rb

class EventsInterest <ActiveRecord::Base
  belongs_to :interest
  belongs_to :event
end

event.rb

class Event <ActiveRecord::Base 
  has_many :events_interests
  has_many :interests, :through => :events_interests
  has_many :users_interests, :through => :interests
  has_many :users, :through => :users_interests


  named_scope :shares_interest_with_users, lambda {|user|
    { :joins => :users_interests,
      :conditions => {:users_interests => {:user_id => user}}
    }
  }

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