Forum: Rails-ES Validar dos modelos

7903bcb9139f94e6f3a13339cb8ef0ac?d=identicon&s=25 Marck VR (maviro)
on 2012-11-11 23:37
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.
This topic is locked and can not be replied to.