2011-01-26 8 views
5

Quiero omitir una validación después de crear un objeto. Vamos a tomar un ejemplovalidación de saltos después de crear carriles monógamos

persona tiene la compañía de muchos y la compañía tiene muchas personas

persona tiene muchas colocaciones y la colocación pertenece a la persona persona sólo puede tener un activo de colocación

modelo de colocación tiene una validación que comprueba si una persona ya tiene una ubicación activa cuando se guarda.

@placement is active placement 
@employment.placement = @person 

if @placement.save 
    ################# 
    @person.placements << @placement 
    @company.placements << @placement 
end 

Ahora cuando la ubicación se guarda por primera vez, no hay problema, se guarda.

Ahora el problema viene cuando

@person.placements << @placement 

Puesto que la persona ya tiene la colocación activa a través de @ placement.save.

@ person.placements < < @placement nuevamente guarda @placement y la validación dispara el error de validación al objeto @placement.

¿Hay alguna manera para que diga no pasar por esa validación específica en alguna parte en la región ############ de mi código.

O cualquier solución alternativa es bienvenida.

Gracias

+0

Usted debe aceptar la respuesta si ha funcionado para usted. Dale al chico sus puntos. :) – sujal

Respuesta

11

puede utilizar: ahorrar: validar => false

+0

¿Pero cómo ** guardas: validate => falso ** mientras utilizas el operador <<, ya que guarda @company y @placements a la vez? Cualquier idea – Gagan

+0

solo guarde la ubicación primero (con validar falsa), luego agréguela a su empresa – MatthewFord

0

Lo primero si desea guardar después de todas las validaciones pases a continuación, hacer algo como esto

if @placement.valid? 
    @person.placements << @placement 
    @company.placements << @placement 
end 

Lo siguiente es si está utilizando MongoId continuación << llamada operador .save en ambos documentos .

La solución puede ser sobreescribir << de mongoid, O necesita especificar la validación durante la cual acción.

validates :placeholder, :on => :create Y O

if @placement.valid? 
    @placement.person = @person 
    @company.placements << @placement 
end 
Cuestiones relacionadas