Pregunta

Tengo Labellings que pertenecen a Emails y Labels.

Cada etiquetado debe ser única para el par de correo electrónico / etiqueta -. Por lo que un correo electrónico sólo puede ser etiquetado 'prueba' una vez

Estoy haciendo esto con validates_uniqueness_of :label_id, :scope => :email_id. Esto funciona como se esperaba.

Cuando estoy etiquetado correos electrónicos, quiero añadir el etiquetado si es único, y no hacer nada si el correo electrónico ya está etiquetada con esa etiqueta.

No quiero duplicar la funcionalidad de validación alrededor de mi aplicación con algo como:

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

¿Es posible asegurar que cada etiqueta tiene una email_ID / par label_id única sin tener que comprobar manualmente o controlar las excepciones?

¿Fue útil?

Solución

Yo no lo he probado, pero es probable que puedo anular << en el proxy asociación, algo como:

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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top