2009-12-24 64 views
0

我有Labellings属于EmailsLabels忽略具体的验证错误

每个标签必须是唯一的电子邮件/标签对 - 所以电子邮件只能标记为'测试'一次。

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

当我为电子邮件添加标签时,如果标签是唯一的,我想添加标签,如果电子邮件已标签为该标签,则不做任何操作。

我不想像复制在我的应用程序的验证功能:

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

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

回答

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 
+0

奇 - 工程一种享受!也教我一些关于ActiveRecord的新技巧:) – nfm 2009-12-25 22:40:12