2011-04-25 10 views
7

quiero validar singularidad de dos presentado, pero si la segunda presentada es nula simplemente ignorar la validación Tengo dos modelo 'activos' y 'Empresa' activo tiene una única código de identificación Lo que quiero hacer es validar la unicidad del código identificador del activo con la empresa. podemos comprobar estoValidar singularidad de dos presentado, pero evitar si segundo es nula

class Asset < ActiveRecord::Base 
    validates :identifier, :uniqueness => {:scope => :company_id} 
end 

pero esto también no permitir nula para dos activos

Cómo puedo ignorar la validación de la unicidad del código de identificación si es nula

podemos pasar a un bloque, o añadir except o algo así que podemos hacer con filtros en el controlador estoy buscando alguna solución como

valida: identificador,: singularidad => {: scope =>: company_id} a menos que {: identifier.is_nil? }

¿Puedo omitir la validación mediante alguna devolución de llamada previa a la validación?

Respuesta

10

de Ruby 1.8.7

validates :identifier, :uniqueness => { :scope => :company_id } , :unless => lambda { |asset| !asset.identifier.nil? } 

de Ruby 1.9.3

validates :identifier, :uniqueness: { scope: :company_id }, unless: lambda { |asset| !asset.identifier.nil? } 
0

Esto ha funcionado para mí en Rails 4.0.1:

validates_uniqueness_of :identifier, :scope => :company_id, :allow_blank => true 

que podría crear objetos con blanco identificadores pero no pudo crear dos objetos con el mismo identificador dentro del mismo compañía.

PD: Sé que esto fue publicado hace mucho tiempo, pero esta forma de hacerlo también se ve bien. Aquí está el Link a una pregunta posterior similar donde encontré la respuesta.

Cuestiones relacionadas