我有属于LabellingsEmails 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