Игнорирование определенных ошибок проверки - PullRequest
0 голосов
/ 24 декабря 2009

У меня есть Labellings, которые принадлежат Emails и Labels.

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

Я делаю это с validates_uniqueness_of :label_id, :scope => :email_id. Это работает как ожидалось.

Когда я маркирую электронные письма, я хочу добавить маркировку, если она уникальна, и ничего не делать, если электронная почта уже помечена этой меткой.

Я не хочу дублировать функциональность проверки вокруг моего приложения с чем-то вроде:

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

Можно ли гарантировать, что каждая маркировка имеет уникальную пару email_id / label_id без необходимости проверять ее вручную или обрабатывать исключения?

1 Ответ

1 голос
/ 24 декабря 2009

Я не проверял, но вы, вероятно, можете переопределить << в прокси ассоциации, что-то вроде:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...