Frage

Ich habe Labellings, die zu Emails und Labels gehören.

Jede Kennzeichnung muss das E-Mail / label Paar einzigartig sein -. So eine E-Mail nur markiert werden kann ‚Test‘ einmal

Ich tue dies mit validates_uniqueness_of :label_id, :scope => :email_id. Dies funktioniert wie erwartet.

Wenn ich E-Mails am Etikettieren, mag ich die Beschriftung hinzufügen, wenn es eindeutig ist, und nichts tun, wenn die E-Mail bereits mit diesem Label gekennzeichnet ist.

Ich will nicht die Validierung Funktionalität um meine app mit etwas duplizieren wie:

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

Ist es möglich, jede Kennzeichnung, um sicherzustellen, hat ein einzigartiges email_id / label_id Paar ohne es manuell oder Griff Ausnahmen zu überprüfen zu haben?

War es hilfreich?

Lösung

Ich habe es nicht getestet, aber man kann wahrscheinlich << im Verein Proxy außer Kraft setzen, so etwas wie:

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top