المتداخلة لديها الكثير من خلال البرنامج المساعد والناشط المسماة
-
24-09-2019 - |
سؤال
لدي نموذج مستخدم (: الاسم ،: كلمة المرور ،: البريد الإلكتروني) ، ونموذج الحدث (: الاسم ،: 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