سؤال

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

شخص

has_many: person_emails has_many: رسائل البريد الإلكتروني ،: من خلال =>: person_emails

person_emails.rb

ينتمي إلى: شخص ينتمي إلى: البريد الإلكتروني

البريد الإلكتروني

has_one: person_email has_one: الشخص ،: من خلال =>: person_email

ما يحدث الآن هو ...

p = person.first #=> "nik" p.emails #=> يعرض جميع رسائل البريد الإلكتروني nik has p.person_emails #=> يعرض جميع سجلات جدول المشترك بين الشخص

e = email.

أود ... E.Person #=> "نيك"

هل لدى أي شخص فكرة عما قد تكون عليه المشكلة؟

شكرا

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

المحلول

يقترح وضعك استخدام ارتباطات متعددة الأشكال ، والتي هي أكثر نظافة من has_many :through ذات الصلة. علي سبيل المثال:

class Person
  has_many :emails, :as => :emailable
end

class Company
  has_many :emails, :as => :emailable
end

class Email
  belongs_to :emailable, :polymorphic => true
end

يمكنك التخلص من PersonEmails الطبقة تماما. في قاعدة البيانات ، الخاص بك emails سيبدو الجدول شيئًا كهذا:

create_table :emails do |t|
  t.string :address
  t.string :emailable_type
  t.integer :emailable_id
end

ال emailable_type يخزن العمود اسم النموذج المرتبط به في حالتك "Person" أو "Company", ، و ال emailable_id يخزن معرف الكائن المرتبط. لمزيد من المعلومات، راجع وثائق API Rails تحت "الجمعيات متعددة الأشكال".

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