Validar dos modelos


#1

Hola a toda la comunidad, saben tengo una pregunta sobre relaciones de
modelos y acudo a la comunidad para ver si alguien puede ayudarme.

Resulta que tengo 2 modelos, Cliente y Referencia, los cuales se
relacionan de la siguiente manera:

class Cliente < ActiveRecord::Base
has_many :referencia
end

class Referencia < ActiveRecord::Base
belongs_to :cliente

validates_presence_of :nombre_referencis, :message=>‘obligatorio’
end

Ambos modelos son creados y guardados en una funcion en el controlador,
lo estoy haciendo con una transaction que tiene la siguiente
estructura:

def index
Cliente.transaction do

    if request.post?
      @cliente = Cliente.new
      @cliente.attributes = params[:clientes]
      @referencia = Referencia.new
      @referencia.attributes = params[:referencia]
      @cliente.save!
      @referencia.cliente_id = @cliente.id
      @referencia.save!
      flash[:notice] = "Guardado Exitosamente"
    end
end

rescue #ActiveRecord::RecordNotFound
flash[:error] = “Errores Impiden Guardar el Registro”
end
end

El problema que me surge es al momento de guardar el registro, pues
segun lo que he leido, la manera de validar modelos asociados es con
validates_associated, por lo cual en el modelo de cliente, he colocado
lo siguiente:
class Cliente < ActiveRecord::Base
has_many :referencia
validates_associated :referencia, :if=>:tiene_referencias

validates_presence_of :nombre, :message=>’ es un campo obligatorio’
validates_presence_of :paterno, :message=>’ es un campo obligatorio’
validates_presence_of :materno, :message=>’ es un campo obligatorio’

def tiene_referencias
if referencia_personal == 1
return true
else
return false
end
end
end

Explicando un poco lo del codigo, puedo contarles que en el formulario
en el que se piden los datos al usuario, existe un checkbox llamado
referencia_personal, el cual llegara con un 1 si es activado o con un 0
si no se activa y esa es la condicion que yo estoy tratando de evaluar
para que solamente cuando se active, se valide el modelo referencia y
sea almacenado.
El problema es que aunque no marque el checkbox, el programa me dice que
el objeto no se pudo guardar porque existen campos vacios, es decir, se
estan realizando las validaciones del modelo asociado.

Si alguien sabe que estoy haciendo mal y me puede hechar la mano, se lo
agradecere mucho.