Domanda

Io ho Labellings che appartengono a Emails E Labels.

Ciascuna etichetta deve essere univoca per la coppia email/etichetta, quindi un'email può essere etichettata come "test" solo una volta.

Lo sto facendo con validates_uniqueness_of :label_id, :scope => :email_id.Funziona come previsto.

Quando etichetto le e-mail, desidero aggiungere l'etichetta se è univoca e non fare nulla se l'e-mail è già etichettata con quell'etichetta.

Non voglio duplicare la funzionalità di convalida della mia app con qualcosa del tipo:

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

È possibile garantire che ciascuna etichetta abbia una coppia email_id/label_id univoca senza doverla controllare manualmente o gestire eccezioni?

È stato utile?

Soluzione

Non l'ho testato, ma probabilmente puoi sovrascriverlo << nel proxy dell'associazione, qualcosa del tipo:

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top