0

我有Labellings哪个属于EmailsLabels

每个标签对于电子邮件/标签对必须是唯一的 - 因此一封电子邮件只能被标记为“测试”一次。

我正在这样做validates_uniqueness_of :label_id, :scope => :email_id。这按预期工作。

当我标记电子邮件时,如果它是唯一的,我想添加标签,如果电子邮件已经用该标签标记,则不执行任何操作。

我不想在我的应用程序周围复制验证功能,例如:

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

是否可以确保每个标签都有一个唯一的 email_id/label_id 对,而无需手动检查或处理异常?

4

1 回答 1

1

我还没有测试过,但您可能可以<<在关联代理中覆盖,例如:

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
于 2009-12-24T06:23:25.030 回答