2009-12-24 2 views
0

У меня есть Labellings, которые принадлежат Emails и Labels.Игнорирование особых ошибок проверки

Каждая маркировка должна быть уникальной для пары электронной почты и ярлыков - поэтому электронное письмо может быть помечено как «тест» один раз.

Я делаю это с 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