Modelar un arbol genealogico

Hola Amigos,

Necisito modelar un arbol genealogico para mis alpacas,
asi: animal, Dam(Mother) and Sire(Father).

class Animal < ActiveRecord::Base
belongs_to :sire
belongs_to :dam
validates_associated :sire, :dam
end

class Sire < Animal
has_many :animals
end

class Dam < Animal
has_many :animals
end

Por ejemplo tengo en mi tabla:

ID, Name Father MOther
1 A - -
2 B - -

entonces inserto un nuevo animal

insert(3,C,1,2) todo correcto porque exite el animal 1 y 2
insert(3,C,5,7) si ingreso los IDs 5 y 7 me acepta sin
problemas pero deberia salirme un error ya que no existen los ids 5 y 7
este caso es valido:
insert(3,C,nil,nil)

como puedo evitar esto??

muchas gracias

On 2/21/07, Alfredo G. [email protected] wrote:

Hola Amigos,

Necisito modelar un arbol genealogico para mis alpacas,
asi: animal, Dam(Mother) and Sire(Father).

class Animal < ActiveRecord::Base
belongs_to :sire
belongs_to :dam
validates_associated :sire, :dam
end

validates_associated es para asegurarte que sire y dam sean válidos en
sí mismos… es lo que querés? Si solamente querés validar que tenga
un ID, entonces:

validates_presence_of :sire_id
validates_presence_of :dam_id

problemas pero deberia salirme un error ya que no existen los ids 5 y 7
este caso es valido:
insert(3,C,nil,nil)

Los inserts los tirás por SQL directamente?

No debería pasar con el validates_presence_of, y de paso podrías hacer
que el campo sire_id y dam_id sean NOT NULL.

Saludos!

Damian J. wrote:

On 2/21/07, Alfredo G. [email protected] wrote:

Hola Amigos,

Necisito modelar un arbol genealogico para mis alpacas,
asi: animal, Dam(Mother) and Sire(Father).

class Animal < ActiveRecord::Base
belongs_to :sire
belongs_to :dam
validates_associated :sire, :dam
end

validates_associated es para asegurarte que sire y dam sean v�lidos en
s� mismos… es lo que quer�s? Si solamente quer�s validar que tenga
un ID, entonces:

validates_presence_of :sire_id
validates_presence_of :dam_id

problemas pero deberia salirme un error ya que no existen los ids 5 y 7
este caso es valido:
insert(3,C,nil,nil)

Los inserts los tir�s por SQL directamente?

No deber�a pasar con el validates_presence_of, y de paso podr�as hacer
que el campo sire_id y dam_id sean NOT NULL.

Saludos!

gracias por responder,

Es valido insertar Nil para los animales iniciales… el
validates_presence_of no generara un error al no tener ningun valor?? no
los tiro de SQL directamente, solo era un ejemplo.

saludos

Damian J. wrote:

On 2/21/07, Alfredo G. [email protected] wrote:

Es valido insertar Nil para los animales iniciales… el
validates_presence_of no generara un error al no tener ningun valor?? no
los tiro de SQL directamente, solo era un ejemplo.

Ahora entiendo, te hab�a contestado cualquier cosa.

El problema es que en realidad ese caso no deber�a pasar, ya que siempre
har�as:

a = Animal.new
a.sire = Sire.find(:first)
a.dam = Dam.find(:first)

Y siempre existen…

Holas de nuevo,

me pasaron este codigo pero no lo comprendo… alguien que me ayude a
entenderlo porfa

validates_presence_of :sire, :if => Proc { |animal| animal.sire_id }
validates_presence_of :dam, :if => Proc { |animal| animal.dam_id }

On 2/21/07, Alfredo G. [email protected] wrote:

Es valido insertar Nil para los animales iniciales… el
validates_presence_of no generara un error al no tener ningun valor?? no
los tiro de SQL directamente, solo era un ejemplo.

Ahora entiendo, te había contestado cualquier cosa.

El problema es que en realidad ese caso no debería pasar, ya que siempre
harías:

a = Animal.new
a.sire = Sire.find(:first)
a.dam = Dam.find(:first)

Y siempre existen…

me pasaron este codigo pero no lo comprendo… alguien que me ayude a
entenderlo porfa

validates_presence_of :sire, :if => Proc { |animal| animal.sire_id }

Primero, recuerda… la documentación es tu amiga :wink:

http://api.rubyonrails.org/classes/ActiveRecord/Validations/ClassMethods.html#M000941

Lo que hace esto básicamente es validar la presencia del atributo :sire
solamente en el caso de que en el objeto que estás validando haya un
sire_id no nulo. En caso de que sea nulo, la validación no se pasa
directamente.

saludos,

javier ramirez


Estamos de estreno… si necesitas llevar el control de tus gastos
visita http://www.gastosgem.com !!Es gratis!!