سؤال

أملك Labellings التي تنتمي Emails و Labels.

يجب أن يكون كل علامة فريدة من نوعها لزوج البريد الإلكتروني/التسمية - بحيث لا يمكن وصف البريد الإلكتروني إلا بأنه "اختبار" مرة واحدة.

أنا أفعل هذا مع validates_uniqueness_of :label_id, :scope => :email_id. هذا يعمل كما هو متوقع.

عندما أقوم بتسمية رسائل البريد الإلكتروني ، أرغب في إضافة العلامات إذا كانت فريدة من نوعها ، ولا أفعل شيئًا إذا تم تسمية البريد الإلكتروني بالفعل بهذه التسمية.

لا أريد تكرار وظيفة التحقق من الصحة حول تطبيقي بشيء مثل:

email.labels << label unless email.labels.include?(label)

هل من الممكن التأكد من أن كل وضع العلامات لديه زوج eMail_id/label_id فريد دون الحاجة إلى التحقق من ذلك يدويًا أو التعامل مع الاستثناءات؟

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

المحلول

لم أختبرها ، ولكن ربما يمكنك تجاوزها << في وكيل الجمعية ، شيء مثل:

class Email < ActiveRecord::Base
  has_many :labelings
  has_many :labels, :through => :labelings do
    def <<(label)
      unless proxy_owner.labels.include?(label)
        proxy_owner.labelings << Labeling.new(:email => proxy_owner, :label => label)      
      end
    end
  end

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